function $A(iterable) { if (!iterable) return []; if (iterable.toArray) return iterable.toArray(); var length = iterable.length || 0, results = new Array(length); while (length--) results[length] = iterable[length]; return results; } Function.prototype.bind = function() { var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); }; }; Function.prototype.bindAsEventListener = function() { var __method = this, args = $A(arguments), object = args.shift(); return function(event) { return __method.apply(object, [event || window.event].concat(args)); }; }; Object.keys = function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }; Object.isArray = function(object) { return object && object.constructor === Array; }; Array.prototype.concat = function() { var array = []; for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); for (var i = 0, length = arguments.length; i < length; i++) { if (Object.isArray(arguments[i])) { for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) array.push(arguments[i][j]); } else { array.push(arguments[i]); } } return array; }; Array.prototype.each=function(f){ for(var i=0;i<this.length;i++) f(this[i],i,this); }; Array.prototype.include = function(object) { var found = false; this.each(function(value) { if (value == object) { found = true; } }); return found; }; Array.prototype.clone = function(){ var len = this.length; var r = []; for(var i=0;i<len;i++){ if(typeof(this[i])=="undefined"||this[i]==null){ r[i] = this[i]; continue; } if(this[i].constructor==Array){ r[i] = this[i].clone(); }else{ r[i] = this[i]; } } return r; }; Array.prototype.insert = function(index,data){ if(isNaN(index) || index<0 || index>this.length) { this.push(data); }else{ var temp = this.slice(index); this[index]=data; for (var i=0; i<temp.length; i++){ this[index+1+i]=temp[i]; } } return this; }; Array.prototype.remove = function(s,dust){// 如果dust为ture,则返回被删除的元素 var dustArr = null; for(var i=0;i<this.length;i++){ if(s == this[i]){ dustArr=this.splice(i, 1)[0]; } } if(dust){ return dustArr; }else{ dustArr=null; return this; } }; Array.prototype.without = function(data){// 如果dust为ture,则返回被删除的元素 var result = []; for(var i=0;i<this.length;i++){ if(data == this[i]){ continue; } result.push(this[i]); } return result; }; Array.prototype.indexOf = function(func){ var len = this.length; for(var i=0;i<len;i++){ if (this[i]==arguments[0]) return i; } return -1; }; Array.prototype.invoke = function(name) { var args = $A(arguments); args.shift(); for(var i=0; i<this.length; i++) { this[i][name].apply(this[i], args); } }; Array.prototype.find = function(fun) { for(var i=0; i<this.length; i++) { if(fun(this[i])) { return this[i]; } } }; Array.prototype.intersect = function(arr) { var result = []; for(var i=0; i<this.length; i++) { if(arr.indexOf(this[i]) != -1) { result.push(this[i]); } } return result; }; function $Element(ele) { if(typeof ele == "string") { ele = document.getElementById(ele); } $addMethod(ele); return ele; } $E = $Element; function $addMethod(ele) { if(ele.__extended) { return; } else { ele.__extended = true; } for(var p in _ObserveAble) { ele[p] = _ObserveAble[p]; } for(var p in _DomOperate) { ele[p] = _DomOperate[p]; } } _DomOperate = { /** * @method getCenter get the element's center position * @param {Element} dom */ getCenter: function(){ //dom = $E(this); var pos = {left: this.offsetLeft, top: this.offsetTop};//dom.offset(); var width = this.clientWidth; var height = this.clientHeight; return {x: pos.left + width / 2, y:pos.top + height / 2}; } }; _ObserveAble = { observes:{}, fire: function(name, memo){ for(var p in this.observes) { if(p == name) { var event = { meno: memo }; observes[p](event); break; } } this.observes.invoke(name, memo); }, observe: function(name, fun){ if(!this.observes[name]) { this.observes[name] = fun; } }, stopObserving: function(name){ delete this.observes[name]; } };