通用的事件绑定的实现

考虑IE兼容性

关于IE低版本的兼容性处理:
IE低版本使用attachEvent绑定事件实现,使用量也比较少,很多网站并不支持。

考虑代理

代理是事件冒泡的一个具体应用
场景:动态随时新增元素,如一个div下面的多个a标签;
方法:将事件绑定到父级div上,通过target属性拿到具体的事件发生者

div1.attachEventListener('click',function(e){
    var target = e.target;
    if(target.nodeName === 'A'){
        alert(targrt.innerHTML)
    }
})
//使用代理
div1 = document.getElementById("div1")
bindEvent(div1,'click','a',function(e){
    e.preventDefault()
    console.log(this.innerHTML)
}
//不使用代理
a= document.getElementById("a")
bindEvent(a,'click',function(e){
    e.preventDefault()
    console.log(a.innerHTML)
}
通用事件的实现
function bindEvent(elem,type,selector,fn){
    if(fn == null){
        fn=selector
        selector=null
    }//
    elem.addEventListener(type,function(e){
        var target
        if(selector){//使用代理
            target =e.target
            if(target.matches(selector)){//匹配选择器
                fn.call(target,e)//this绑定到target
            }
        }else{//不使用代理
            fn(e)
        }
    })
}
场景

无限下拉的加载图片的页面,如何绑定事件?
使用代理实现:代码简洁,绑定一次就可以,对浏览器的压力小,渲染好一点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值