前端企业面试真题-046写一个通用的事件侦听器函数

写一个通用的事件侦听器函数
var EventHandler = (function(){
    function EventAdapter(ev){
        //使用适配器包装Event对象
        return {
            clientX: ev.clientX,
            clientY: ev.clientY,
            ...
            //处理兼容
            stopPropagation: function(){
                ev.stopPropagation ? ev.stopPropagation() : ev.cancelBubble = true;
            },
            preventDefault: function(){
                ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;
            },
            target : ev.target || ev.srcElement,
            ...
        }
    }
    
    //生成代理函数
    function createProxy(func){
        //代理函数需要做记录,便于后续卸载
        window[func] = function(e){
            func(EventAdapter(e))
        }
        return window[func];
    }
    return {
        addEvent: function(ele, type, func){
            if(ele.addEventListener){
                ele.addEventListener(type, createProxy(func))
            } else {
                ele.attachEvent('on'+type, createProxy(func))
            }
        },
        removeEvent: function(ele, type, func){
            if(ele.addEventListener){
                ele.removeEventListener(type, window[func])
            } else {
                ele.attachEvent('on'+type, window[func])
            }
            //卸载代理函数后,清除属性
            delete window[func]
        }
    }
})()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值