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