.animate()的callback调用两次jquery
由于我添加了一些scrollTop
animation,我的callback的一些部分被调用两次:
$('html, body').animate({scrollTop: '0px'}, 300,function() { $('#content').load(window.location.href, postdata, function() { $('#step2').addClass('stepactive').hide().fadeIn(700, function() { $('#content').show('slide',800); }); }); });
它似乎只重复.show()
,至less我没有这样的load()
或.fadeIn()
第二次调用的印象。 .show()
会在第一次完成时重复。 设置scrollTopanimation速度为0
没有帮助的方式!
我认为它与animation队列有关,但我无法弄清楚如何find解决办法,特别是为什么会发生这种情况。
animate
为调用animate
的集合中的每个元素调用其callback一次:
如果提供, 每个元素的基础上调用
start
,step
,progress
,complete
,done
,fail
和always
callback。
由于您正在为两个元素( html
元素和body
元素)设置animation,因此您将获得两个callback。 (对于任何人想知道为什么OP是animation两个元素,这是因为animation在一些浏览器上的body
上工作,而在其他浏览器上的html
上)。
为了在animation完成时获得单个callback, animate
文档指出使用promise
方法获取animation队列的承诺,然后使用这个承诺排队callback:
$("html, body").animate(/*...*/) .promise().then(function() { // Animation complete });
(注意:Kevin B 在第一个问题的答案中就指出了这个问题,直到四年后,当我注意到这个问题时,我才注意到这个问题,补充说,然后……看到Kevin的回答。爱它值得,我认为这是被接受的答案,我应该留下。)
以下是一个显示个别元素callback和整体callback的示例:
jQuery(function($) { $("#one, #two").animate({ marginLeft: "30em" }, function() { // Called per element display("Done animating " + this.id); }).promise().then(function() { // Called when the animation in total is complete display("Done with animation"); }); function display(msg) { $("<p>").html(msg).appendTo(document.body); } });
<div id="one">I'm one</div> <div id="two">I'm two</div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
要获得多个元素animation完成的单个callback,请使用延迟对象。
$(".myClass").animate({ marginLeft: "30em" }).promise().done(function(){ alert("Done animating"); });
有关Promise和Deferred Objects的详细说明,请参阅jQuery API。
- 是否有可能捕获JavaScriptasynchronouscallback中引发的exception?
- 代表和callback是相同的还是相似的?
- 当在JavaScript循环内使用callback时,有没有什么办法可以保存循环中更新的variables以便在callback中使用?
- Facebook“赞”buttoncallback
- 如何“validation”在轨道上销毁
- 如何编写一个接受callback作为参数的jquery函数
- 在片段中的onCreateView之前调用setUserVisibleHint
- 方法调用release()exception后无法使用android相机继续
- 嵌套callback的Java模式?