首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用setInterval的Js动画随着时间的推移而变慢

问使用setInterval的Js动画随着时间的推移而变慢
EN

Stack Overflow用户
提问于 2013-12-12 21:33:10
回答 1查看 838关注 0票数 0

我有一个网站,它使用这个滚动条http://manos.malihu.gr/jquery-custom-content-scroller/显示一个投资组合。

当页面完全加载时,我希望有一个自动滚动。当用户通过投资组合时,它会停止滚动,当他离开时,它又开始移动了。

它目前运行良好,但有时它变得缓慢或缓慢随机。我的js功能有什么问题吗?

下面是有问题的页面:http://www.lecarreau.net/new/spip.php?rubrique5 (我需要主机提供商的更改,我知道站点速度很慢)。

这是一项功能:

代码语言:javascript
复制
(function($){
var timerId = 0;
$(window).load(function(){
    $("#carousel").show().mCustomScrollbar( {
        mouseWheel:false,
        mouseWheelPixels:50,
        horizontalScroll:true,
        setHeight:370,
        scrollButtons:{
            enable: true,
            scrollSpeed:50
        },
        advanced:{
            updateOnContentResize:true
        }
    });
    timerId = setInterval(function(){myTimer()},50);
    $('#carousel').mouseenter(function () {
      clearInterval(timerId);
    });
    $('#carousel').mouseleave(function () {
      timerId = setInterval(function(){myTimer()},50);
    });
});
})(jQuery);


function myTimer()
{
  var width = $(".mCSB_container").width();
  var left = $(".mCSB_container").position().left;
  if (width-left>0) {
    var scrollTo = -left+4;
    $("#carousel").mCustomScrollbar("scrollTo", scrollTo);
  }
}

我有什么明显的遗漏吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 21:48:52

浏览器中的定时从来没有保证过。由于单个事件循环上的所有功能内容都是时间,因此连续重复的任务有时会变得有点简陋。

您可以做的一件事情可能会减少jank,那就是每50 is缓存一次正在创建的jQuery对象:

代码语言:javascript
复制
var mCSBContainerEl = $(".mCSB_container");
var carouselEl = $("#carousel")
function myTimer()
{
  var width = mCSBContainerEl.width();
  var left = mCSBContainerEl.position().left;
  if (width-left>0) {
    var scrollTo = -left+4;
    carouselEl.mCustomScrollbar("scrollTo", scrollTo);
  }
}

选择这些元素只需要发生一次。在那里,他们只需引用一个变量,而不必一次又一次地在页面上找到元素并将其包装在jQuery中。

在本例中,缓存变量取决于代码运行时它们是否在DOM中,这在这里不能保证。您可能必须将变量赋值和函数声明移到传递给load的函数中。

此外,正如John所建议的,请考虑查看requestAnimationFrame。这是保罗·爱尔兰人用的一个垫子:http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20554712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档