【事件绑定的方式】兼容浏览器的事件监听器的设计

一、兼容浏览器的事件监听器
主要是兼容IE8以前的浏览器,addEvent方法中介绍了三种绑定事件的方式,其中要注意:
(1)在IE的事件绑定方式中,事件处理函数里面的事件对象时挂在window上面的,所以获取event对象时需要利用window.event来获取
(2)addEventListener添加监听器时注意事件的冒泡和事件的捕获,即该方法的第三个参数,事件的冒泡和捕获注意的事项参见下文
(3)利用属性绑定事件只能为同一个类型的事件添加一个事件处理函数,其他的两种方式均可以为同一类型的事件添加多个处理函数。所以属性绑定事件移除时直接赋值null即可。

EventUnit={
    addEvent:function(ele,type,handler){
        if(ele.addEventListener)
        {
            ele.addEventListener(type,handler,false);
        }
        else if(ele.attachEvent)
        {
            ele.attachEvent('on'+type,handler);
        }
        else ele['on'+type]=handler;
    },
    removeEvent:function (ele,type,handler) {
        if(ele.removeEventListener)
            ele.removeEventListener(type,handler);
        else if(ele.dispatchEvent())
            ele.dispatchEvent('on'+type,handler);
        else ele['on'+type]=null;
    },
    stopPropagation:function (ev) {
        if(ev.stopPropagation) ev.stopPropagation();
        else ev.cancelBubble=true;
    },
    preventDefault:function (ev) {
        if(ev.preventDefault)ev.preventDefault();
        else ev.returnValue=false;
    },
    getTarget:function(ev)
    {
       return ev.target||ev.srcElement;
    },
    getEvent:function (ev) {
        var ev=ev||window.event;
        return ev;

    }

}

二、事件的捕获和冒泡
1、基本概念
(1)在IE8+的浏览器以及谷歌等浏览器中事件的发生均有三个阶段:事件的捕获–》事件触发对象–》事件冒泡
(2)事件捕获:
当event.target触发事件时,事件首先会发生在捕获阶段,即从上到下执行阶段,当该元素的祖先元素注册了同类型的事件且事件时发生捕获阶段(addEventListener的第三个参数设置为true,默认情况下所有事件时发生在冒泡阶段的,除了不能发生冒泡的事件)时,会先触发祖先元素的事件函数,一次向下执行。
(3)事件的冒泡则与事件的捕获的发生过程想法,事件的执行过程时从event.target向上冒泡执行的,不能冒泡的事件有:mouseenter/mouseleave/focus/blur/load等
2、事件冒泡捕获的具体情况
在同一个元素上注册同一类型事件的两种处理方式的回调函数,即既有冒泡的回调也有捕获的回调

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        #one{
            width:400px;
            height:400px;
            border:2px solid red;
        }
        #two{
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值