Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在现代jQuery动画中,setInterval()和setTimeout()是不是很糟糕?_Javascript_Jquery_Animation - Fatal编程技术网

Javascript 在现代jQuery动画中,setInterval()和setTimeout()是不是很糟糕?

Javascript 在现代jQuery动画中,setInterval()和setTimeout()是不是很糟糕?,javascript,jquery,animation,Javascript,Jquery,Animation,我在jQuery1.6的动画方面遇到了一些问题。我用jQuery1.5解决了这个问题 在我的项目中,我使用setInterval()制作自定义徽标滑块。动画立即(不是同时)两个接两个地启动。当我在页面上时,一切都进行得很顺利,但当我转到其他选项卡并返回到我的页面项目时(大约两分钟后),一切都变得疯狂 好的,我得到了一个使用Queue()的答案。用这种方法我能达到同样的效果吗 我的book Manning jQuery正在运行中,使用Queue()即时启动的动画中没有任何内容 引用其中一些答案:

我在jQuery1.6的动画方面遇到了一些问题。我用jQuery1.5解决了这个问题

在我的项目中,我使用
setInterval()
制作自定义徽标滑块。动画立即(不是同时)两个接两个地启动。当我在页面上时,一切都进行得很顺利,但当我转到其他选项卡并返回到我的页面项目时(大约两分钟后),一切都变得疯狂

好的,我得到了一个使用
Queue()
的答案。用这种方法我能达到同样的效果吗

我的book Manning jQuery正在运行中,使用
Queue()
即时启动的动画中没有任何内容

引用其中一些答案:

由于requestAnimationFrame()的性质,您不应该使用setInterval或setTimeout循环对动画进行排队


对于动画,通常setInterval==BADsetTimeout==GOOD

setInterval将尝试播放catchup,如nnnnnn所述:

一些浏览器可能会将所有内容排队,然后在您的 tab再次获得焦点

循环animate()的最佳方法是递归调用,例如:

var myTimeout;

var myAnimation = function () {

    $('#myID').animate({
        [propertyKey]:[propertyValue]
    }, 5000, function() {
        myTimeout = setTimeOut(myAnimation, 1000);
    });
}
请注意,myTimeout是如何在myanimation的范围之外保持的,从而允许停止动画

clearTimeout(myTimeout);

你可以连接到窗口。卸载事件。

我的一个页面上发生了类似的事情。我通过
.stop()
在每个间隔开始时调用所有活动动画来解决这个问题。不同的浏览器处理计时器的方式不同,当您的选项卡失去焦点时会发生什么情况,例如,一些浏览器可能会暂时挂起您的
设置间隔
;有些人可能会将所有内容排队,然后在您的选项卡再次获得焦点时试图赶上进度-听起来这就是发生在您身上的事情。@nnnnnn但是使用jQuery 1.5没有问题。。。我取消了UI效果并返回到
animate()
,但我怀疑这将修复和UI效果。有点,问题#9381是同一个窗口。卸载问题,但是使用setInterval()只会进一步恶化-您应该始终跟踪动画。除非你需要一个能播放接球的计时器,否则setInterval仍然是个邪恶的东西。