1 /**
  2  * @fileOverview anim-node-plugin
  3  * @author yiminghe@gmail.com,
  4  *         lifesinger@gmail.com,
  5  *         qiaohua@taobao.com,
  6  *
  7  */
  8 KISSY.add('node/anim', function (S, DOM, Anim, Node, undefined) {
  9 
 10     var FX = [
 11         // height animations
 12         [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
 13         // width animations
 14         [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
 15         // opacity animations
 16         [ "opacity" ]
 17     ];
 18 
 19     function getFxs(type, num, from) {
 20         var ret = [],
 21             obj = {};
 22         for (var i = from || 0; i < num; i++) {
 23             ret.push.apply(ret, FX[i]);
 24         }
 25         for (i = 0; i < ret.length; i++) {
 26             obj[ret[i]] = type;
 27         }
 28         return obj;
 29     }
 30 
 31     S.augment(Node, {
 32         animate:function () {
 33             var self = this,
 34                 args = S.makeArray(arguments);
 35             S.each(self, function (elem) {
 36                 Anim.apply(undefined, [elem].concat(args)).run();
 37             });
 38             return self;
 39         },
 40         stop:function (end, clearQueue, queue) {
 41             var self = this;
 42             S.each(self, function (elem) {
 43                 Anim.stop(elem, end, clearQueue, queue);
 44             });
 45             return self;
 46         },
 47         pause:function (end, queue) {
 48             var self = this;
 49             S.each(self, function (elem) {
 50                 Anim.pause(elem, queue);
 51             });
 52             return self;
 53         },
 54         resume:function (end, queue) {
 55             var self = this;
 56             S.each(self, function (elem) {
 57                 Anim.resume(elem, queue);
 58             });
 59             return self;
 60         },
 61         isRunning:function () {
 62             var self = this;
 63             for (var i = 0; i < self.length; i++) {
 64                 if (Anim.isRunning(self[i])) {
 65                     return 1;
 66                 }
 67             }
 68             return 0;
 69         },
 70         isPaused:function () {
 71             var self = this;
 72             for (var i = 0; i < self.length; i++) {
 73                 if (Anim.isPaused(self[i])) {
 74                     return 1;
 75                 }
 76             }
 77             return 0;
 78         }
 79     });
 80 
 81     S.each({
 82             show:getFxs("show", 3),
 83             hide:getFxs("hide", 3),
 84             toggle:getFxs("toggle", 3),
 85             fadeIn:getFxs("show", 3, 2),
 86             fadeOut:getFxs("hide", 3, 2),
 87             fadeToggle:getFxs("toggle", 3, 2),
 88             slideDown:getFxs("show", 1),
 89             slideUp:getFxs("hide", 1),
 90             slideToggle:getFxs("toggle", 1)
 91         },
 92         function (v, k) {
 93             Node.prototype[k] = function (speed, callback, easing) {
 94                 var self = this;
 95                 // 没有参数时,调用 DOM 中的对应方法
 96                 if (DOM[k] && !speed) {
 97                     DOM[k](self);
 98                 } else {
 99                     S.each(self, function (elem) {
100                         Anim(elem, v, speed, easing || 'easeOut', callback).run();
101                     });
102                 }
103                 return self;
104             };
105         });
106 
107 }, {
108     requires:["dom", "anim", "./base"]
109 });
110 /**
111  * 2011-11-10
112  *  - 重写,逻辑放到 Anim 模块,这边只进行转发
113  *
114  * 2011-05-17
115  *  - 承玉:添加 stop ,随时停止动画
116  *
117  *  TODO
118  *  - anim needs queue mechanism ?
119  */
120