原生js事件方法

(function(window){
    //传参以dom(el)方式输出
    var o = {
        //去除空格
        trim = function(str){
            if(String.prototype.trim){
                return str == null ? "" : String.prototype.trim.call(str);
            }else{
                return str.replace(/(^\s*)|(\s*$)/g, "");
            }
        },
        //获取元素的第一个
        dom = function(el, selector){
            //传参为1
            if(arguments.length === 1 && typeof arguments[0] == 'string'){
                if(document.querySelector){
                    return document.querySelector(arguments[0]);
                }
            //传参为2    
            }else if(arguments.length === 2){
                if(document.querySelector(arguments[0]).querySelector){
                    return document.querySelector(arguments[0]).querySelector(selector);
                }
            }
         },
        //反回元素的集合
        domAll = function(el, selector){
            if(arguments.length === 1 && typeof arguments[0] == 'string'){
                if(document.querySelectorAll){
                    return document.querySelectorAll(arguments[0]);
                }
            }else if(arguments.length === 2){
                if(</em>document.querySelector(arguments[0])<em>.querySelectorAll){
                    return document.querySelector(arguments[0]).querySelectorAll(selector);
                } 
            } 
        },
        //判断数组
        isArray = function(obj){
            if(Array.isArray){
                return Array.isArray(obj);
            }else{
                return obj instanceof Array;
            }
        },
        //添加事件
        addEvt = function(el, name, fn, useCapture){
            var useCapture = useCapture || false;
            if(el.addEventListener) {
                el.addEventListener(name, fn, useCapture);
            }
        },
        //移除事件
        rmEvt = function(el, name, fn, useCapture){
            var useCapture = useCapture || false;
            if (el.removeEventListener) {
                el.removeEventListener(name, fn, useCapture);
            }
        },
        //获取第一个元素
        first = function(el, selector){
            if(arguments.length === 1){
                return el.children[0];
            }
            if(arguments.length === 2){
                return this.dom(el, selector+':first-child');
            }
        },
        //获取最后一个元素
        last = function(el, selector){
            if(arguments.length === 1){
                var children = el.children;
                return children[children.length - 1];
            }
            if(arguments.length === 2){
                return this.dom(el, selector+':last-child');
            }
        },
        //获取元素的index
        eq = function(el, index){
            return this.dom(el, ':nth-child('+ index +')');
        },
        //除了此元素
            not = function(el, selector){
            return this.domAll(el, ':not('+ selector +')');
        },
        //上一个元素
        prev = function(el){
            var node = el.previousSibling;
            if(node.nodeType && node.nodeType === 3){
                node = node.previousSibling;
                return node;
            }
        },
        //下一个元素
        next = function(el){
            var node = el.nextSibling;
            if(node.nodeType && node.nodeType === 3){
                node = node.nextSibling;
                return node;
            }
        },
        //事件委托匹配元素祖先元素
        closest = function(el, selector){
            var doms, targetDom;
            var isSame = function(doms, el){
                var i = 0, len = doms.length;
                for(i; i<len; i++){
                    if(doms[i].isEqualNode(el)){
                        return doms[i];
                    }
                }
                return false;
            };
            var traversal = function(el, selector){
                doms = u.domAll(el.parentNode, selector);
                targetDom = isSame(doms, el);
                while(!targetDom){
                    el = el.parentNode;
                    if(el != null && el.nodeType == el.DOCUMENT_NODE){
                        return false;
                    }
                    traversal(el, selector);
                }
 
                return targetDom;
            };
 
            return traversal(el, selector);
        },
        //移除元素
        remove = function(el){
            if(el && el.parentNode){
                el.parentNode.removeChild(el);
            }
        },
        //设置获取元素的属性
        attr = function(el, name, value){
            if(arguments.length == 2){
                return el.getAttribute(name);
            }else if(arguments.length == 3){
                el.setAttribute(name, value);
                return el;
            }
        },
        //移除元素的属性
        removeAttr = function(el, name){
            if(arguments.length === 2){
                el.removeAttribute(name);
            }
        },
        //判断是否有class
        hasCls = function(el, cls){
            if(el.className.indexOf(cls) > -1){
                return true;
            }else{
                return false;
            }
        },
        //添加class
        addCls = function(el, cls){
            if('classList' in el){
                el.classList.add(cls);
            }else{
                var preCls = el.className;
                var newCls = preCls +' '+ cls;
                el.className = newCls;
            }
            return el;
        },
        //删除class
        removeCls = function(el, cls){
            if('classList' in el){
                el.classList.remove(cls);
            }else{
                var preCls = el.className;
                var newCls = preCls.replace(cls, '');
                el.className = newCls;
            }
            return el;
        },
        //添加或删除动画
        toggleCls = function(el, cls){
           if('classList' in el){
                el.classList.toggle(cls);
            }else{
                if(u.hasCls(el, cls)){
                    u.addCls(el, cls);
                }else{
                    u.removeCls(el, cls);
                }
            }
            return el; 
        },
        //获取或改变元素的值
        val = function(el, val){ 
            if(arguments.length === 1){
                switch(el.tagName){
                    case 'SELECT':
                        var value = el.options[el.selectedIndex].value;
                        return value;
                        break;
                    case 'INPUT':
                        return el.value;
                        break;
                    case 'TEXTAREA':
                        return el.value;
                        break;
                }
            }
            if(arguments.length === 2){
                switch(el.tagName){
                    case 'SELECT':
                        el.options[el.selectedIndex].value = val;
                        return el;
                        break;
                    case 'INPUT':
                        el.value = val;
                        return el;
                        break;
                    case 'TEXTAREA':
                        el.value = val;
                        return el;
                        break;
                }
            }
             
        },
        //追加元素的方法
        prepend = function(el, html){
            el.insertAdjacentHTML('afterbegin', html);
            return el;
        },
        append = function(el, html){
            el.insertAdjacentHTML('beforeend', html);
            return el;
        },
        before = function(el, html){
            el.insertAdjacentHTML('beforebegin', html);
            return el;
        },
        after = function(el, html){
            el.insertAdjacentHTML('afterend', html);
            return el;
        },
        //获取或改变html代码
        html = function(el, html){
            if(arguments.length === 1){
                return el.innerHTML;
            }else if(arguments.length === 2){
                el.innerHTML = html;
                return el;
            }
        },
        //获取或改变文本
        text = function(el, txt){
            if(arguments.length === 1){
                return el.textContent;
            }else if(arguments.length === 2){
                el.textContent = txt;
                return el;
            }
        },
        //对象位于页面可见内容的距离
        offset = function(el){
            var sl, st;
            if(document.documentElement){
                sl = document.documentElement.scrollLeft;
                st = document.documentElement.scrollTop;
            }else{
                sl = document.body.scrollLeft;
                st = document.body.scrollTop;
            }
            var rect = el.getBoundingClientRect();
            return {
                l: rect.left + sl,
                t: rect.top + st,
                w: el.offsetWidth,
                h: el.offsetHeight
            };
        },
        //动态添加style 多个样式用domAll
        css = function(el, css){
            if(typeof css == 'string' && css.indexOf(':') > 0){
               el.style && (el.style.cssText += ';' + css);
            }
            if(el.length>1){
                for(var i = 0;i<el.length;i++){
                    if(typeof css == 'string' && css.indexOf(':') > 0){
                        el[i].style && (el[i].style.cssText += ';' + css);
                    }
                }
            }
        },
        //得到元素的css
        cssVal = function(el, prop){
            if(arguments.length === 2){
                var computedStyle = window.getComputedStyle(el, null);
                return computedStyle.getPropertyValue(prop);
            }
        },
        //json转化为字符串
        jsonToStr = function(json){
            if(typeof json === 'object'){
                return JSON && JSON.stringify(json);
            }
        },
        //字符串转化json
        strToJson = function(str){
            if(typeof str === 'string'){
                return JSON && JSON.parse(str);
            }
        },
        //添加缓存信息
        setStorage = function(key, value){
            if(arguments.length === 2){
                var v = value;
                if(typeof v == 'object'){
                    v = JSON.stringify(v);
                    v = 'obj-'+ v;
                }else{
                    v = 'str-'+ v;
                }
                var ls = uzStorage();
                if(ls){
                    ls.setItem(key, v);
                }
            }
        },
        //获取缓存信息
        getStorage = function(key){
            var ls = uzStorage();
            if(ls){
                var v = ls.getItem(key);
                if(!v){return;}
                if(v.indexOf('obj-') === 0){
                    v = v.slice(4);
                    return JSON.parse(v);
                }else if(v.indexOf('str-') === 0){
                    return v.slice(4);
                }
            }
        },
        //移除缓存信息
        removeStorage = function(key){
            var ls = uzStorage();
            if(ls && key){
                ls.removeItem(key);
            }
        },
        //清楚所有缓存信息
        clearStorage = function(){
            var ls = uzStorage();
            if(ls){
                ls.clear();
            }
        }
    window.zhanglei = o;
})(window)

  

posted @ 2016-12-01 03:20  <张磊>  阅读(1745)  评论(0编辑  收藏  举报