jQuery链接动画没有插件

在使用jQuery之前,我可以做一个链接动画,延迟时间如下:
$("#element").delay(45).animate({ },45)
             .delay(45).animate({ },45);

现在,自从更新到v1.6.1而不是执行之前的操作之后,它现在跳到最后一个动画.忽略之前的陈述.我知道我可以为每个动画做一个不完整的回调,但这只是弄乱了:

$("#element").delay(45).animate({ },45,function(){
    $("#element").delay(45).animate({ },function(){
        $("#element").delay(45).animate({ },45);
    })
})

有谁知道如何以简单干净的方式实现这一目标?

解决方法

这是第二种方式.我把它贴在另一个答案中,因为它更复杂,也许不那么漂亮.要玩它,请参阅: http://jsfiddle.net/LMptt/1/

用法:使用带或的字符串来表示相对时间戳.该顺序对相对时间戳(相对于之前的操作)很重要.使用“0”或“-0”表示与前一个时间戳相同的时间戳.绝对时间戳(整数)可以放在列表中的任何位置.

$(document).ready(function ()
{
    queue([
        [2000,function () {  $('.two').slideUp(); }],['-1000',function () {  $('.one').slideUp(); }],[3000,function () {  $('.three').slideUp(); }],['+1000',function () {  $('.four').slideUp(); }]
    ]);

});

/**
 * Queue.js
 *
 * @author Arend van Waart
 *
 *  This will allow for events to be queued by (relative) timestamp
 */

 function queue (queue){
    var self = this;
    // queue
    this.queue = queue;
    // time passed is 0
    this.timePassed = 0;
    // time in ms to sleep between checks.
    this.sleep = 100;

    var time = new Date();
    this.lastTime = time.getTime();
    this.iterate = function(){
        var total = 0;
        var time = new Date();

        // how much time has passed since we slept?
        self.timePassed = self.timePassed + (time.getTime() - self.lastTime);
        self.lastTime = time.getTime();

        for (var i in self.queue) {
            if (self.queue[i][0] <= self.timePassed){
                self.queue[i][1]();
                self.queue.splice(i,1);
            } else {
                // added sorting now,so we don't have to evaluate the rest.
                break;
            }
        }

        if (self.queue.length == 0){
            return;
        }else{
            setTimeout(self.iterate,self.sleep);
        }
    }


    this.parseRelative = function ()
    {
        var absoluteQueue = [];
        var lastAbsolute = 0;
        for (var i in queue)
        {
           var absolute;
           var firstChar = String(queue[i][0]).charAt(0);
           if (firstChar == "+" ||  firstChar == "-")
           {
              absolute = lastAbsolute + parseInt(queue[i][0]);
           } else {
              absolute = parseInt(queue[i][0]);
           }
           lastAbsolute = absolute;
           absoluteQueue.push([absolute,queue[i][1]]);
        }
        this.queue = absoluteQueue;
    }
    this.sort = function (a,b)
    {
        return a[0] - b[0];
    }

    this.parseRelative();
    this.queue.sort(this.sort);
    this.iterate();
}

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...