extend.js


// 扩展Vue的公共方法
Vue.prototype.Fn = {

    //添加事件绑定
    addEventHandler: function (target, type, fn) {
        if (target.addEventListener) {
            target.addEventListener(type, fn, false);
        } else if (target.attachEvent) {
            target.attachEvent("on" + type, fn);
        }
    },

    //移除事件绑定
    removeEventHandler: function (target, type, fn) {
        if (target.removeEventListener) {
            target.removeEventListener(type, fn);
        } else {
            target.detachEvent(type, fn);
        }
    },

    // 阻止默认事件
    preventDefault: function (event) {
        var e = event || window.event;
        if (event.preventDefault) {
            e.preventDefault();
        } else {
            e.returnValue = false;
        }
    },

    // 阻止冒泡事件
    stopPropagation: function (event) {
        var e = event || window.event;
        if (e.stopPropagation) {
            e.stopPropagation();
        } else {
            e.canceBubble = true;
            return false;
        }
    },

    //判断Object类型
    isObjectType: function (obj) {
        var types = ["Object", "Array", "String", "Function", "Boolean", "Number", "Undefined", "Null", "Window", "Date", "RegExp", "HTMLDocument"];
        for (var i = 0; i < types.length; i++) {
            var type = types[i];
            if (Object.prototype.toString.call(obj) === "[object " + type + "]") return type
        }
    },

    //数组与纯对象的深拷贝
    copy: function (obj, deep) {//默认false,即浅拷贝,若要深拷贝rdeep传值为true即可
        if (this.isObjectType(obj) === "Object") {
            var target = {},
                deep = (this.isObjectType(deep) === "Boolean") ? deep : false;
            for (var key in obj) {
                target[key] = (deep && this.isObjectType(obj[key]) === "Object") ? this.clone(obj[key], deep) : obj[key];
            }
            return target
        } else if (this.isObjectType(obj) === "Array") {
            return obj.concat()
        } else {
            throw new Error("拷贝对象类型错误!")
        }
    },

    //对象数组按指定属性排序
    sortBy: function (arr, prop, rev) {//默认升序,若要降序rev传值为true即可
        var rev = !rev ? 1 : -1;
        arr.sort(function (a, b) {
            a = a[prop];
            b = b[prop];
            if (a > b) return rev * 1;
            if (a < b) return rev * -1;
            return 0
        });
        return arr
    },

    //获取随机数
    getRandom: function (min, max) {
        return Math.round(Math.random() * (max - min) + min)
    },

    // 判断是否是DOM对象
    isDOM: function (obj) {
        if (typeof HTMLElement === 'object') {
            return obj instanceof HTMLElement
        } else {
            return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'
        }
    },

    /*********************************************************我是分割线***************************************************************/

    // 查询一个字符串出现的最多次的字符
    queryMostChar: function queryMostChar(str) {
        var temp = {},
            result = {};
        for (var i = 0; i < str.length; i++) {
            var char = str.charAt(i);
            if (temp[char]) {
                temp[char]++
            } else {
                temp[char] = 1
            }
        };
        var max = 0, mostChar;
        for (key in temp) {
            if (max < temp[key]) {
                max = temp[key];
                mostChar = key;
            }
        }
        result[mostChar] = max;
        return result
    },

    // 获取window窗口内容大小 
    getInnerClient: function () {
        if (window.innerWidth) {
            return {
                width: window.innerWidth,
                height: window.innerHeight
            }
        } else {
            return {
                width: document.documentElement.clientWidth,
                height: document.documentElement.clientHeight
            }
        }
    },

    // 模仿jQuery封装鼠标hover事件
    mouseHover: function (obj, enter, leave) {
        obj.onmouseenter = enter;
        obj.onmouseleave = leave;
    },

    // 原生JS获取DOM,不推荐,既然用Vue就可以用ref传递了
    getElement: function (el) {
        if (typeof el === "string") {
            if (el.indexOf("#") == 0) {
                return document.getElementById(el.replace("#", ""))
            } else if (el.indexOf(".") == 0) {
                return document.getElementsByClassName(el.replace(".", ""))
            } else {
                return document.getElementsByTagName(el)
            }
        }
    }

}

猜你喜欢

转载自my.oschina.net/u/3288561/blog/1558263
今日推荐