我有多个功能,为HTML的不同部分做不同的动画。我想链接或排队这些功能,所以他们将依次运行动画,而不是在同一时间。
我试图按顺序自动化多个事件,看起来像用户一直在点击不同的按钮或链接。
我可以使用回调函数来执行此操作,但是我必须从不同的函数中拉取所有动画,并以正确的模式重新组合。
jquery“队列”是否有帮助?我不明白队列的documentation。
示例,JQuery:
function One() { $('div#animateTest1').animate({ left: '+=200' },2000); } function Two() { $('div#animateTest2').animate({ width: '+=200' },2000); } // Call these functions sequentially so that the animations // in One() run b/f the animations in Two() One(); Two();
HTML:
<div id="animatetest" style="width:50px;height:50px;background-color:Aqua;position:absolute;"></div> <div id="animatetest2" style="width:50px;height:50px;background-color:red;position:absolute;top:100px;"></div>
谢谢。
编辑:
我试着用timers,但我认为有更好的方法来做到这一点。
编辑#2:
让我更具体我有多个功能必须点击&在页面的不同元素上悬停事件。通常这些功能与彼此无关(它们不参考)。我想模拟一个用户通过这些事件,而不用改变我现有的功能的代码。
解决方法
jQuery Queue代码并没有记录在案,但基本思想是这样的:
$("#some_element").queue("namedQueue",function() { console.log("First"); var self = this; setTimeout(function() { $(self).dequeue("namedQueue"); },1000); }); $("#some_element").queue("namedQueue",function() { console.log("Second"); var self = this; setTimeout(function() { $(self).dequeue("namedQueue"); },function() { console.log("Third"); }); $("#some_element").dequeue("namedQueue");
如果运行这段代码,控制台中将显示“First”,暂停1秒,在控制台中看到“Second”,再次暂停1秒,最后在控制台中看到“Third”。
基本思想是,您可以拥有绑定到元素的任意数量的命名队列。通过调用dequeue从队列中删除一个元素。您可以自己手动执行此操作多次,但如果您希望队列自动运行,您可以简单地在排队功能中调用出队。
jQuery中的动画都运行在名为fx的队列中。当您为元素设置动画时,它会自动将新动画添加到队列中,如果当前没有动画正在运行,则会调用出队。如果您愿意,可以将自己的回调插入到fx队列中;您只需要在结束时手动调用出队(与任何其他队列一样使用)。