jQuery:为什么这个函数会激活4次?

时间:2011-03-08 08:32:59

标签: jquery function animation triggers scroll

我已经写了一堆jQuery的东西来帮助我的朋友用他的在线作品集,可以在这里找到:http://bradleyrogerson.com/(以供我将要描述的参考)。

这里也是javascript的直接链接:http://bradleyrogerson.com/static/js/actions-take2.js

这是一个相当长的文件,所以如果我不直接将它全部放在Stack Overflow的代码块中,那可能是最好的。

问题本身非常简单,你可以在网站上轻松看到破碎的动画(上面的链接)。 本质上我的hideProject()函数基本上隐藏了项目,然后将所有项目的原始概述滑回到视图中,因为一个我根本找不到的原因而触发了4次。

这方面的关键问题是,在动画的最后一次回调中,我为scrollLeft&的body属性设置了动画。 html元素,以便在转到“更多信息”视图之前可视地滑回到您停止的位置。

因为动画被触发了4次,所以大约有1.2秒的窗口,其中视口是动画的,这有效地破坏了在此期间向右滚动的能力。

这可以通过立即转到his site并点击最右边的图像(水平滚动页面布局)轻松复制,然后一旦查看了项目,只需单击其中一个图像即可触发hideProject()函数,一旦视口动画,尽可能立即向左滚动。

你会注意到你仍然无法使用动画仍然按下你的尝试向左推出窗口,一次又一次地强制scrollLeft值(4次)。

我已经很好地评论了javascript file(至少我是这么认为的)所以一旦打开就应该很容易阅读和理解。

我真的很感激这个问题的答案,如何解决它,但最重要的是一些关于为什么它首先破坏的建议,这样我就可以从中吸取教训而不再犯这个错误。

非常感谢您阅读。

Jannis

注意:相关功能(至少我认为这是原因)位于this fileline 212

1 个答案:

答案 0 :(得分:1)

添加断点后,我只能看到此函数触发两次,一次因为你将它绑定到元素#project-media的click事件,另一个因为你将它绑定到hashchange()事件。只需使click事件触发hashchange()而不是调用hideProject()或简单地删除绑定。绑定在331行进行。