jQuery - setInterval()函数w / .animate()很慢

时间:2012-01-06 21:41:22

标签: jquery setinterval

这曾经有效,但它突然停止了,我不确定发生了什么变化。

概述:我们有一些HTML ...

<div id="side">
  <ul id="photos">
    <li><img... </li>
    <li><img... </li>
    <li><img... </li>
    ...
  </ul>
</div>

有一个固定高度的div position:fixedoverflow:hidden,其中有一个<ul>,其高度大于包含<div>和{{ 1}}。我们的想法是,当用户向position;absolute的底部盘旋时,#side会向上滚动。我把它设置为向边缘滚动更快〜5px,向中间慢速~1px。

问题在于它正在缓慢地移动。喜欢它将向上移动1个像素,然后等待,然后向上移动另一个像素。我将间隔设置为10,这应该非常快,之前工作得相当好。

所以这里是脚本,relivant函数最后是#photos,其余的是以防万一。

setInterval()

1 个答案:

答案 0 :(得分:0)

您对.stop("true", "true")的调用可能无效,因为您传递字符串而不是布尔true。查看jQuery代码,对于.stop(),当第一个参数是字符串时,jQuery认为您正在传递队列名称。由于没有名为"true"的队列名称,因此对.stop()的调用可能没有做任何事情。即使它确实有效,也应该在之前,而不是在你致电.animate()之后。这意味着你实际上正在累积同时运行的600/10 = 60个动画,因为你每10ms开始一个新的600ms动画。在同一个对象上同时运行60个动画可能是搞乱你的一部分。

您的动画通话应如下所示:

$("#photos").stop(true, true).animate({"top":"-="+a+"px"},"slow","easeOutExpo");

而且,您需要摆脱setInterval()中的.hover()调用,或者将其时间更改为与您正在进行的600ms动画更兼容的内容。停止并重新启动600毫秒动画,每10毫秒不会做你想要的。