事件绑定
DOM0方式
- 通过dom元素的(on + 事件名称)属性来绑定事件,并且赋值为 一个字符串
- 上述字符串为 执行该事件的代码块(逻辑)
- 缺点: 可读性 以及 可维护性不好。
DOM0方式的加强版
- 通过dom元素的(on + 事件名称)属性来绑定事件,并且赋值为 事件处理函数
- 缺点: 定义很多的全局函数,容易造成内存过大损耗。依然没有解决js代码 和 html的耦合度问题
IE标准:
- 通过attachEvent方法来绑定事件
- 语法:dom.attachEvent(type, callback)
- 移除事件:detachEvent(type, callback)
- 注意:如果想要删除某个事件的处理函数,不能将该处理函数定义为匿名的
W3C标准
- 通过addEventListener方法来给dom元素绑定事件
- 语法: dom.addEventListener(type, callback, useCapture) useCapture默认值为 false
- 移除事件:removeEventListener(type, callback)
- 注意:如果想要删除某个事件的处理函数,不能将该处理函数定义为匿名的
事件流
- 概念:用户在触发某一动作时,页面所做相关反映的过程。
- 三个阶段:
- 事件捕获阶段
- 处于事件源阶段
- 冒泡阶段
- 事件流种类:
- 捕获型事件流: 事件处理函数 是在 事件的捕获阶段执行
- 冒泡型事件流:事件处理函数 是在 事件的冒泡阶段执行
attachEvent 和 addEventListener 区别
- 参数个数不同
- 事件类型 传值也不同
- IE:要+ ‘on’前缀
- W3C:不需要
- 在绑定多个事件处理函数时,IE在执行处理函数时,顺序不定(得看版本);
而W3C,按照队列结构来依次执行事件的处理函数 - 在事件处理函数内this指向不同
- IE: window
- w3c: 返回正在执行事件处理函数的 dom元素
addEvent方法
- 根据浏览器能力,提前返回 事件绑定方法
- 如果浏览器符合W3C标准,使用addEventListener绑定事件
- 否则就使用attachEvent来绑定事件
removeEvent方法
- 根据浏览器能力,提前返回 事件移除方法
- 如果浏览器符合W3C标准,使用removeEventListener移除事件处理函数
- 否则就使用detachEvent来移除事件处理函数
on方法
- 功能:给moyas对象上所有dom元素绑定事件
- 实现思路
- 遍历this上所有dom元素
- 调用addEvent给当前遍历到的dom元素绑定事件
- 返回this,实现链式编程
off方法
- 功能:移除moyas对象上所有dom元素的事件处理函数
- 实现思路
- 遍历this上所有dom元素
- 调用removeEvent给当前遍历到的dom元素移除相应事件的处理函数
- 返回this,实现链式编程
代码如下
|
|