【发布时间】:2011-10-18 03:55:29
【问题描述】:
我花了几天的时间,我放弃了。
我正在尝试让一个对象无限地沿着正弦波进行动画处理。它不应该在第一个周期之后结束。
主要问题:循环在大约 1 1/3 Pi 处结束,而不仅仅是 Pi。这个额外的动作会破坏动画。
我被困在这里:http://jsfiddle.net/WPnQG/12/。在每个周期之后,它会跳过大约 40 个像素,然后沿着它的路径继续前进。这是我无法解决的问题——它结束的值和重新启动的值不相等,所以对象似乎跳过了。任何人都可以帮助一个人吗?谢谢
我正在使用jQuery Path Plugin 来执行动画的路径——有问题的正弦波。
来源:
function float(dir){
var x_current = $("div").offset().left;
var y_current = $("div").offset().top;
var SineWave = function() {
this.css = function(p) {
var s = Math.sin(Math.abs(p-1)*10);
if (!dir){// flip the sin wave to continue traversing
s = -s;
}
var x = 300 -p * 300;
var y = s * 100 + 150;
//var o = ((s+2)/4+0.1); //opacity change
last_x = x;
// add the current x-position to continue the path, rather than restarting
return {top: y + "px", left: x_current + x + "px"};
}
};
$("div").stop().animate({
path: new SineWave
}, 5000, 'linear', function(){
// avoid exceeding stack
setTimeout(function(){float(!dir)}, 0);
});
}
【问题讨论】:
-
我可以问你为什么打电话给
float(true,false),即使float(dir)只接受一个参数?只是想学JS -
我正在测试一些东西,但因为我删除了参数而忘记了把它去掉,除了可能在 IE 中抛出一个错误之外什么都不会做
标签: jquery animation bezier trigonometry