我正试图让一个div从一个屏幕的一端移动到一个循环的另一端。 我的javascript目前只尝试向左移动div但不起作用。
var func = function() {
$("#bob").animate({"left": "-40px"}, 1000, function() {
$(this).animate({"left": "40px"}, 1000)
})
setTimeout(func, 2000);
}
这是我的jsfiddle:
答案 0 :(得分:4)
命名您的函数,然后在另一个函数中使用一个作为完成回调:
function goLeft() {
$('#bob').animate({'left': '-40px'}, 1000, goRight);
}
function goRight() {
$('#bob').animate({'left': '40px'}, 1000, goLeft);
}
goLeft();
所以,当它完成后,它应该是正确的。当它完成后,它应该离开。
免责声明:未经测试
P.S。你在小提琴中缺少jQuery。
答案 1 :(得分:3)
您当前的小提琴不起作用,因为您没有包含jQuery(来自左侧的Frameworks& Extensions下拉列表),因为您定义了func()
函数但从未实际调用它。修复这两件事,它将如下所示:http://jsfiddle.net/N48Eg/8/
但请注意,您的动画代码比它需要的更复杂。同一元素上的多个动画将由jQuery自动排队,因此您不需要在第一个上使用回调来启动第二个动画。您可以在第二个回调中提供func
作为回调,并完全避免setTimeout()
:
var func = function() {
$("#bob").animate({"left": "-40px"}, 1000)
.animate({"left": "40px"}, 1000, func);
}
func();
答案 2 :(得分:0)
你刚刚没有调用你的函数......
var func = function() {
$("#bob").animate({"left": "-40px"}, 1000, function() {
$(this).animate({"left": "40px"}, 1000)
})
setTimeout(func, 2000); // added back
}
func();
答案 3 :(得分:0)
首先,如果您希望动画继续,则需要使用setInterval
代替setTimeout
此外,您需要将setInterval
移出func
范围,或致电func
以启动动画
答案 4 :(得分:0)
答案 5 :(得分:0)
这是纯CSS版本。 http://jsfiddle.net/zDSRd/
#bob
{
position:absolute;
animation: fly 2s linear 0s alternate infinite;
-webkit-animation: fly 2s linear 0s alternate infinite;
-moz-animation: fly 2s linear 0s alternate infinite;
-o-animation: fly 2s linear 0s alternate infinite;
-ms-animation: fly 2s linear 0s alternate infinite;
}
@keyframes fly {
from { transform: translateX(0px); }
to { transform: translateX(500px); }
}
@-webkit-keyframes fly {
from { -webkit-transform: translateX(0px); }
to { -webkit-transform: translateX(500px); }
}
@-moz-keyframes fly {
from { -moz-transform: translateX(0px); }
to { -moz-transform: translateX(500px); }
}
@-o-keyframes fly {
from { -o-transform: translateX(0px); }
to { -o-transform: translateX(500px); }
}
@-ms-keyframes fly {
from { -ms-transform: translateX(0px); }
to { -ms-transform: translateX(500px); }
}