跨瀏覽器的事件對象

設(shè)置EventUtil對象來處理瀏覽器間的差異

  • addHandler()方法接受3個參數(shù):要操作的元素、事件名稱和事件處理程序函數(shù)
var client = function() {
    var engine = {
//         呈現(xiàn)引擎
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0, 
        opera: 0,
        
//        具體的版本號
        ver: null
    };
    
//     在此檢測呈現(xiàn)引擎、平臺和設(shè)備
    
    return {
        engine: engine
    }
}();


var EventUtil = {
    addHandler: function(element, type, handler) {
        if (element.addEventListener) {
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent("on" + type, handler);
        } else {
            element["on" + type] = handler;
        }
    },
    getEvent: function(event) {
        return event ? event : window.event;
    },
    getTarget: function(event) {
        return event.target || event.srcElement;
    },
    preventDefault: function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
    removeHandler: function(element, type, handler) {
        if (element.removeEventListener) {
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent) {
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    },
    stopPropagation: function(event) {
        if (event.stopPropagation) {
            event.stopPropagation()
        } else {
            event.cancelBubble = true;
        }
    },
    getRelatedTarget: function(event) {
        if (event.relatedTarget) {
            return event.relatedTarget;
        } else if (event.toElement) {
            return event.toElement;
        } else if (event.fromElement) {
            return event.fromElement;
        } else {
            return null;
        }
    },
    getButton: function (event) {
        if (document.implementation.hasFeature("MouseEvents", "2.0")) {
            return event.button;
        } else {
            switch(event.button) {
                case 0:
                case 1:
                case 3:
                case 5:
                case 7:
                    return 0;
                case 2:
                case 6:
                    return 2;
                case 4:
                    return 1;
                               }
        }
    },
    getWheelDelta: function(event) {
        if (event.wheelDelta) {
            return (client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta);
        } else {
            return -event.detail * 40
        }
    }
};
?

// 示例
var btn = document.getElementById("content")
var handler = function() {
    alert("hahahahahah")
};
EventUtil.addHandler(btn, "click", handler)

EventUtil.addHandler(div, "click", function(event) {
    event = EventUtil.getEvent(event);
    var keys = new Array()
    if (event.shiftKey) {
        keys.push("shift")
    }
    
    if (event.ctrlKey) {
        keys.push("ctrl");
    }
    
    if (event.altKey) {
        keys.push("alt");
    }
    
    if (event.metaKey) {
        keys.push("meta")
    }
    
    console.log("Keys: " + keys.join(","));
})
//處理鼠標滾輪的交互操作
// 當用戶向前滾動鼠標滾輪時, wheelDelta是120的倍數(shù),當用戶向后滾動鼠標滾輪時,wheelDelta是-120的倍數(shù)
// 在Opera9.5之前的版本中,wheelDelta值得正負號是顛倒的

var client = function() {
    var engine = {
//         呈現(xiàn)引擎
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0, 
        opera: 0,
        
//        具體的版本號
        ver: null
    };
    
//     在此檢測呈現(xiàn)引擎、平臺和設(shè)備
    
    return {
        engine: engine
    }
}();

EventUtil.addHandler(document, "mousewheel", function(event) {
    event = EventUtil.getEvent(event);
    var delta = (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta);
    console.log(delta)
})


}G`FZ9VIRYI4QYXLKXE9R8M.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 雖然DOM和IE中的event對象不同,但基于他們之間相似依舊可以拿出跨瀏覽器方案來。 以上代碼顯示,我們?yōu)镋ve...
    Miss_Fairy閱讀 443評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 由于ie和其它瀏覽器的區(qū)別,在對DOM進行事件注冊的和使用event對象的時候,需要一種快捷的封裝好的工具方法。 ...
    whiterum閱讀 298評論 0 0
  • 周一,各種忙亂。 白天,頂著一張毀容的臉,日常工作。 晚上,頂著一張毀容的臉,布置品鑒會會場,開會,排練節(jié)目。 永...
    梅_宗主閱讀 183評論 2 0
  • 可為畫畫有些進步了,雖然依然是抽象派的,但是,我能從可為的畫里看得出他內(nèi)心的表達。 可為還是挺喜歡搭樂高玩具的。他...
    惜言001閱讀 294評論 0 1

友情鏈接更多精彩內(nèi)容