zoukankan      html  css  js  c++  java
  • js事件监听/鼠标滚轮/行为/冒泡/键盘的兼容性写法

    addEvent:function(el,type,fn,capture) {
        if (window.addEventListener) {    
            if (type === "mousewheel" && document.mozHidden !== undefined) {
                type = "DOMMouseScroll";
            }    
            el.addEventListener(type, fn, !!capture);
        } else if (window.attachEvent) {
            el.attachEvent("on" + type, fn);
        }
    },
    removeEvent:function(el,type,fn,capture) {
        if (window.removeEventListener) {    
            if (type === "mousewheel" && document.mozHidden !== undefined) {
                type = "DOMMouseScroll";
            }    
            el.removeEventListener(type, fn, !!capture);
        } else if (window.detachEvent) {
            el.detachEvent("on" + type, fn);
        }
    },
    //对鼠标滚轮、行为、冒泡以及键盘做的兼容性处理
    eventCompat:function(e) {
        e || (e = root.event);
        var type = e.type;
        if (type == 'DOMMouseScroll' || type == 'mousewheel') {
            e.delta = (e.wheelDelta) ? -e.wheelDelta / 120 : (e.detail || 0) / 3;
        }
        if (e.srcElement && !e.target) {
            e.target = e.srcElement;    
        }
        //阻止默认行为
        if (!e.preventDefault) {
            e.preventDefault = function() {
                e.returnValue = false;
            };
        }
        //阻止冒泡
        if (!e.stopPropagation && e.cancelBubble !== undefined) {
            e.stopPropagation = function() {
                e.cancelBubble = true;
            };
        }
        //键盘的兼容性处理
        if(e.which == null){
            e.which = e.charCode != null ? e.charCode : e.keyCode;
        }
        /* 
           ......其他一些兼容性处理 */
        return e;
    },
    bindAsEventListener:function(context, fun) {
        var self = this;
        return function(e) {
            return fun.call(context, self.eventCompat(e));
        }
    }
    
    
    //调用:
    var dom = document.getElementById('btn');
    var object = {
        clickCtrl:function(e){
            alert(e);    
        }
    };
    
    addEvent(dom, "click", function(){
        alert(dom.id);                                       
    });
    
    addEvent(dom, "mousedown", 
        bindAsEventListener(object, function(e){ 
            object.ClickCtrl(e);
    }));
     
  • 相关阅读:
    htpasswd命令
    GitHub访问速度慢的解决方法
    easyui datagrid 首次不加载做法
    Excel日常操作
    补偿接口中循环一直执行sql的问题
    rabbitMq无法消费发送的q的问题
    Unicode与中文转换工具类方法(转)
    idea 一些插件配置
    线程安全的集合类、CopyOnWrite机制介绍(转)
    java websocket学习
  • 原文地址:https://www.cnblogs.com/gulan/p/5884940.html
Copyright © 2011-2022 走看看