同时添加多个窗口改变大小事件



使用方法:

_resize.add(fn,number,true)     //添加一个函数,并立即执行;
_resize.add([fn,fn,fn],number,true)     //添加多个函数,并立即执行。
_resize.close()     //移除窗口改变大小事件
_resize.open()     //添加窗口改变大小事件,并立即执行



//判断数组是否包含值

Array.prototype.contains = function(v){
    if(this.length == 0) return false;
    for(var i = 0; i < this.length; i++){
        if(this[i] !== v) return false;
    }
    return true;
}




//窗口改变大小事件

//需要Array.prototype.contains的支持

//在添加窗口改变大小事件的同时,如果实参t为true,则立即执行该函数

//否则只在窗口变大大小时才执行函数

//如果该函数被添加过,则不会再次添加,即使实参t为true,也不执行该函数

//如果添加时,第一个为数组,执行顺序按照数组序列执行

//实参n为第几执行


var _resize = {
    cache : [],
    add : function(f,n,t){
        var a = this.cache;
        if(f instanceof Array){
            for (var i = 0; i < f.length; i++) {
                if(!(f[i] instanceof Function)){
                    console.error("_resize.add(): 这里的参数类型应该为function");
                    continue;
                }
                if (!a.contains(f[i])) {
                    if(t) f[i]();
                    this.cache[n++] = f[i];
                }
            }
        }else{
            if(!(f instanceof Function)){
                console.error("_resize.add(): 这里的参数类型应该为function");
                return;
            }
            if(!a.contains(f)){
                if(t) f();
                this.cache[n] = f;
            }
        }
    },
    colse : function(){
        window.onresize = null;
    },
    open : function(){
        window.onresize = function(){
            for(var i = 0; i < _resize.cache.length; i++){
                    if(i in _resize.cache){
                        _resize.cache[i]();
                    }
                }
         };
        window.onresize();
    }
}


你可能感兴趣的:(resize,窗口改变大小事件)