这曾经有效,但它突然停止了,我不确定发生了什么变化。
概述:我们有一些HTML ...
<div id="side">
<ul id="photos">
<li><img... </li>
<li><img... </li>
<li><img... </li>
...
</ul>
</div>
有一个固定高度的div position:fixed
和overflow:hidden
,其中有一个<ul>
,其高度大于包含<div>
和{{ 1}}。我们的想法是,当用户向position;absolute
的底部盘旋时,#side
会向上滚动。我把它设置为向边缘滚动更快〜5px,向中间慢速~1px。
问题在于它正在缓慢地移动。喜欢它将向上移动1个像素,然后等待,然后向上移动另一个像素。我将间隔设置为10,这应该非常快,之前工作得相当好。
所以这里是脚本,relivant函数最后是#photos
,其余的是以防万一。
setInterval()
答案 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毫秒不会做你想要的。