Javascript 我的设置超时不';我不能正常工作
代码如下:Javascript 我的设置超时不';我不能正常工作,javascript,jquery,loops,settimeout,Javascript,Jquery,Loops,Settimeout,代码如下: var stripeAnimation = function() { var streetDivWidth = $('.street_name').width(); var streetFull = $('.street_name .street_name_text'); for(var i=0; i<streetFull.length; i++) { var item = $(streetFull[i]); var widthFull = item.wid
var stripeAnimation = function() {
var streetDivWidth = $('.street_name').width();
var streetFull = $('.street_name .street_name_text');
for(var i=0; i<streetFull.length; i++) {
var item = $(streetFull[i]);
var widthFull = item.width();
var remainder = widthFull - streetDivWidth;
var animationSpeed = widthFull * 5;
var summary = streetDivWidth - widthFull;
if(summary < 0) {
item.children('.gradient_span').addClass('gradient');
infinite();
setTimeout(infinite, 1000);
}
}
function infinite() {
item.animate({
marginLeft: '-' + remainder + 'px'
}, animationSpeed).animate({
marginLeft: 0
}, widthFull).delay(1000);
}
}
$(document).ready(function() {
stripeAnimation();
});
var stripeAnimation=function(){
var streetDivWidth=$('.street_name').width();
var streetFull=$('.street_name.street_name_text');
对于(var i=0;i如果要循环,则需要使用setInterval()
然后
余数变量是局部变量,u将其用作全局函数。应全局声明它。setTimeout
将只调用函数一次,但正如Arun p所说,您可以选择使用setInterval
,只是不建议将其用于动画。setInterval的问题是您指定的延迟间隔fy是调用它之前的最短时间,但不是在该间隔结束时调用它的承诺
例如,如果设置了300毫秒的间隔,但队列被其他操作(UI或其他JS操作)阻塞比如说,600毫秒后,你的函数将被调用两次,一次又一次,没有延迟,这将使你的动画不均匀。你不能确保超时将被精确地调用,只是不小于这个间隔
更好的方法是使用setTimeout进行第一次初始调用,正如您所做的那样,然后在infinite()
函数调用setTimeout(infinite,1000)
结束时再次调用
综上所述,如果适用的话,制作动画的最佳方法是requestAnimationFrame方法,您可以在这里查看:
我会避免在动画中使用setInterval,因为它可能会导致动画不均匀。在这里,我不知道为什么它只适用于最后一个span块。((嗨!谢谢。但是我改变了方法,它仍然以相同的方式工作:它会循环,你说的“仍然以相同的方式工作”是什么意思?)?什么不对?看起来不错,我看到你使用了requestAnimationFrame,也在无限函数中调用了它。因为这是我建议的,如果你能接受我的答案作为这个问题的正确答案并投赞成票,我将不胜感激!但是很抱歉,我不能投你的赞成票,因为我的声誉很低。我会的嗯,我拿到了一些。
setInterval(infinite, 10000);
function infinite() {
item.animate({
marginLeft: '-' + remainder + 'px'
}, animationSpeed).animate({
marginLeft: 0
}, widthFull);
}