JavaScript起步(二十-DOM事件一)| 一起学系列

144 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第18天,点击查看活动详情

  • 注册事件的兼容写法

    • 自定义一个注册事件函数

    • 参数:事件源、事件类型(不加on)、事件函数

    • IE9及以上的浏览器使用addEventListener方法

    • IE9以下的浏览器,使用attachEvent方法

    • 判断浏览器时,不需要判断它的版本,可以检测浏览器能力

    • 浏览器能力检测:将某个方法的调用作为if语句的判断条件,如果浏览器认识该方法返回true,否则返回false image.png

  • 解除事件绑定的方法(DOM 0级)

    • btn.onclick = function () { alert(1);};

    • btn.onclick = null;

    • 解除事件绑定的方法(DOM 2级)(element.addEventListener()方法)

    • element.removeEventListener()方法

    • 参数:第一个参数:事件类型的字符串(直接书写:“click”,不需要加on)       第二个参数:事件函数引用名

    • 注意:无法移除一个匿名函数,所以注册事件时需要单独声明一个有函数名的事件函数

    • 兼容问题:不支持IE9以下的浏览器 image.png

  • 解除事件绑定的方法(DOM 2级)(element.attachEvent()方法)

    • element.detachEvent()方法

    • 参数:第一个参数:事件类型的字符串(需要加on)       

      第二个参数:事件函数引用名

    • 注意:无法移除一个匿名函数,所以注册事件时需要单独声明一个有函数名的事件函数

    • 兼容问题:只支持IE10以下的浏览器 image.png

  • 移除事件的兼容写法

    • 自定义一个移除事件函数

    • 参数:事件源、事件类型(不加on)、事件函数

    • IE9及以上的浏览器,使用removeEventListener()方法

    • IE9以下的浏览器,使用detachEvent()方法

    • 建议:将自己封装的一些常用函数和方法,放到一个单独的.js文件中 image.png

  • DOM事件流

    • 在监听事件中,true为捕获顺序,false为冒泡顺序。比如下面的例子,点击最内层的蓝色,默认是以冒泡顺序,执行box3、box2、box1的监听事件。 image.png
  • 事件流的三个阶段

    • 第一个阶段:事件捕获

    • 第二个阶段:事件执行过程

    • 第三个阶段:事件冒泡(较为多用)

    • addEventListener()第三个参数为false时,事件冒泡

    • addEventListener()第三个参数为true时,事件捕获

    • onclick类型:只能进行事件冒泡过程,没有捕获阶段

    • attachEvent()方法:只能进行事件冒泡过程,没有捕获阶段