【问题标题】:javascript effects queue (chain)javascript 效果队列(链)
【发布时间】:2011-05-03 03:50:12
【问题描述】:

我正在为我的工作构建一个动画框架,并且我在队列或链效果部分中进行了库存,实际上我有这样的东西:

var Fx = {
    animate: function(){...},
    fadeIn: function(){...},
    fadeOut: function(){...}
}

等等等等……所以,实际上我可以做到:

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

而且效果很好!但是淡入淡出和动画同时执行,但我想做的是:

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

所以它先执行动画,然后执行淡入

其实我有类似的东西:

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??!谢谢

【问题讨论】:

    标签: javascript javascript-framework


    【解决方案1】:

    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();
    

    【讨论】:

    • +1 不错的答案;希望我能为提供演示加分!
    • 我试过了,但似乎不起作用:(它只是执行第一种方法,我的意思是,在这里:chain(el).animate(opts).fadeOut(opts); 它只是执行动画部分,而不是淡出
    • 哇,这在演示中有效!让我检查一下,也许是我的错误
    • 好的,我修改了链函数,所以我可以这样称呼它: $('#element').chain().animate({opts}).fadeOut({opts}).end( );并且不起作用,:(我会将其粘贴到 jsbin.com,谢谢您的帮助!!我会让您知道链接!:D
    • 哦,我明白了我的错误,我忘记在每个请求上发送“之后”功能,谢谢!我要改变它!非常感谢!
    猜你喜欢
    • 2011-06-07
    • 2012-08-24
    • 1970-01-01
    • 2012-03-30
    • 2013-07-15
    • 1970-01-01
    • 2020-01-04
    • 2015-11-10
    • 2018-03-16
    相关资源
    最近更新 更多