javascript特效队列(链)

时间:2010-10-31 19:34:06

标签: javascript javascript-framework

我正在为我的作品构建一个动画框架,并在队列或链效应部分中存储,实际上我有这样的东西:

var Fx = {
    animate: function(){...},
    fadeIn: function(){...},
    fadeOut: function(){...}
}
等等......所以,实际上我可以这样做:

$('#element').animate({options}).fadeIn({options});

它非常棒!但是fadeIn和animate同时执行,但我想做的事情是:

$('#element').chain().animate({options}).fadeIn({options});

所以先执行animate然后再执行fadeIn

实际上我有类似的东西:

var Chain = function(element){
 var target = element;
 for (methodName in Fx) {

  (function(methodName) {
    Chain.prototype[methodName] = function() {
     var args = Array.prototype.slice.call(arguments);
    return this;
    };
  })(methodName);
 }
}

Fx.chain = function(element){
  return 
    }

我可以获得调用的所有方法和那些东西,但我不知道如何将其推送到数组甚至调用第一个方法,因为我试图将所有请求都发送到数组并且每次调用时都会调用它完了。

我不使用jQuery,因为我说我需要制作一个个性化的框架。

任何想法pleeeasse ??!谢谢

1 个答案:

答案 0 :(得分:4)

  

<强> Simple Demo

var Fx = {
  animate: function(el, style, duration, after){
    // do animation...
    after();
  },
  fadeIn: function(el, duration, after){
    // do fading ...
    after();
  }, 
  // other effects ...

  chain: function (el) {

    var que = [];
    function callNext() { que.length && que.shift()(); }

    return {
      animate: function(style, duration) {
        que.push(function() {
          Fx.animate(el, style, duration, callNext);
        });
        return this;
      },
      fadeIn: function(duration){
        que.push(function() {
          Fx.fadeIn(el, duration, callNext);
        });
        return this;
      }, // ...
      end: callNext
    };
  }
};

用法

Fx.chain(el).animate("style", 300).fadeIn(600).animate("style2", 900).end();