jquery setInterval 创建动画构建

发布于 2024-11-28 09:39:47 字数 345 浏览 2 评论 0原文

创建了一个画廊

我使用 setInterval fiddle

该画廊效果很好,唯一的问题是如果有人离开页面探索另一个“浏览器选项卡”,返回图库页面,看起来像 setInterval() 与 jQuery .animate() 结合创建了一个奇怪的动画构建。

为了让我自己清楚:当您从另一个打开的“浏览器选项卡”返回该页面时 - 动画似乎已经缓存了所有动画,现在正在尝试立即补偿所有动画。

请任何建议,我们将不胜感激。
谢谢

I created a gallery using setInterval

fiddle

The gallery works great, the only problem is that if someone leaves the page exploring another 'browser tab', coming back to the gallery page, it looks like
setInterval() in combination with the jQuery .animate() creates a strange animation buildup.

To make my self clear: when you come back from another opened 'browser tab' to the page - the animation seem like it has cached all the animations and now is trying to compensate all the animations at once.

Please any advice will be greatly appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拔了角的鹿 2024-12-05 09:39:47

您不应该在这里执行 setInterval() 。您永远不能假设您的动画将在下一个时间间隔内及时完成。始终在回调中使用 setTimeout:

   function start(){
        interv = setTimeout(function() {         
            counter++;                  
            if (counter === (iN+1)) {
                counter = 1;
            }          
            $('#slideshow').animate({scrollLeft: 922*(counter-1)}, 1000, function(){ 
                     start(); // Apply recursive callback
            });
        }, 2000);         
    }

然后使用 clearTimeout() 而不是 clearInterval()

You should not be doing setInterval() here. You can never assume that your animation will be finished in time for the next interval. Always use setTimeout inside a callback:

   function start(){
        interv = setTimeout(function() {         
            counter++;                  
            if (counter === (iN+1)) {
                counter = 1;
            }          
            $('#slideshow').animate({scrollLeft: 922*(counter-1)}, 1000, function(){ 
                     start(); // Apply recursive callback
            });
        }, 2000);         
    }

Then later on, use clearTimeout() instead of clearInterval()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文