【问题标题】:.animate(); in Javascript is Freezing for a second.动画();在 Javascript 中冻结一秒钟
【发布时间】:2014-11-24 22:43:41
【问题描述】:

我在 Javascript 中遇到了 .animate() 的问题。我正在使用它来自动滚动到正在工作的 div 中的一个元素。我遇到的问题是,几毫秒后,滚动会冻结一秒钟左右,然后在应该已经动画到的那个点继续,然后继续动画没有任何问题。

可滚动的 div 包含大约 36 个宽度为 75 px 的 div,背景是动态生成的 SVG 图。为我使用的 div 设置动画

parent.stop(true, false).animate({
            scrollLeft: offsetToLeft
        }, 50*Math.abs(elementsToSkipp), function (element, index) {
            //Show highlight the element and refresh data
            return false;
        }.bind(this, forecastElement[0], index));

return false;.stop(true, false) 来自 Stackoverflow,但它并没有真正解决我的问题。非常感谢您的帮助。

编辑: 我只在移动设备(iOS、Android)上遇到过这种延迟,在台式电脑上没有这种延迟。

谢谢,

大卫

【问题讨论】:

  • 您是否同时在做其他事情? Ajax 调用返回数据,改变 DOM?
  • 能否提供更多代码来重现问题?
  • @Ludovic 抱歉,我无法显示更多代码,因为它处于保密协议之下。
  • @epascarello 不,不是。在动画之前我正在计算offsetToLeft,仅此而已。然后当涉及到动画部分时,我可以看到一个滞后。您过去是否遇到过类似的问题?
  • 您可能想调查Velocity.js。它或多或少是 jQuery 动画代码的替代品,而且通常表现得更好。

标签: javascript jquery css animation


【解决方案1】:

听起来您正在运行动画作为对滚动事件的响应。这是解决此类问题的帖子(包括代码):Jquery slow reaction time

【讨论】:

  • 不,动画是点击事件的结果。当用户点击按钮时,滚动视图会将应显示的元素移动到屏幕的左边框。
  • 你能确保点击事件只引发一次吗?
  • mandez zaig 是的,该函数只调用一次。我还应该指出,滞后只发生在移动设备(iOS 和 Android)上。台式电脑没有这种滞后。
  • 在这种情况下,请将 bind 方法替换为 on 方法
  • @yackovmandeszaig 这不是 jQuery .bind() 方法,它是 Function.prototype.bind()
猜你喜欢
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多