注册事件
给元素添加事件成为注册事件或者绑定事件
分为两种
传统方式——特点:唯一性
监听方式——特点:同一个元素可以注册多个监听器
事件监听
addEventListener()(IE9以后支持)
type:事件类型字符串 如click、mouseover等
listener:事件处理函数,事件发生时,会调用该监听函数
useCapture:默认是false
attacheEvent()(IE678支持)
eventNameWithOn:事件类型字符串,如onclick、onmousepver等
callback:事件处理函数,目标触发事件回调函数被调用
删除事件
传统方式:eventTarget.οnclick=null;
监听方式:eventTarget.removeEventListener(type,listener[,useCaptuer] );
eventTarget.detachEvent(eventNameWithOn,callback);
DOM事件流
事件发生时会在元素节点之间按照特定的传播顺序传播,这个传播过程就叫DOM事件流
DOM 事件流会经历3个阶段:
1. 捕获阶段——父级到目标
2. 当前目标阶段
3. 冒泡阶段——目标到父级
注意
js代码只能执行捕获或者冒泡其中一个阶段
onclick和attachEvent只能得到冒泡阶段
addEventListener第三个参数为true,表示在捕获阶段,反之为冒泡阶段,默认为false
有些事件是没有冒泡的,如onclick、onfocus等
事件对象
事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象
事件对象的使用
用event或evt或e来作为事件对象
兼容性处理
在 IE6~8 中,浏览器不会给方法传递参数,如果需要的话,需要到 window.event 中获取查找
解决:e=e||window.event;
属性和方法
e.target 返回触发事件的对象
e.srcElement 返回触发事件的对象 ie6~8使用
e.type 返回事件的类型
e.cancelBubble 阻止冒泡 ie6~8
e.stopPropagation() 阻止冒泡
e.returnValue 阻止默认事件 ie6~8
e.preventDefault() 阻止默认事件
e.target 和 this 的区别
this 是事件绑定的元素(绑定这个事件处理函数的元素)
e.target 是事件触发的元素
事件委托
原理:给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素
作用:1、只操作了一次 DOM ,提高了程序的性能
2、动态新创建的子元素,也拥有事件
常用鼠标事件
鼠标事件:onclick 点击左键等
事件对象
相对于窗口可视区坐标
e.clientX
e.clientY
相对于文档页面坐标
e.pageX
e.pageY
相对于电脑屏幕坐标
e.screenX
e.screenY
常用的键盘事件
键盘事件
onkeyup 按键松开时触发
onkeydown 按键按下时触发
onkeypress 按键按下是触发——不识别功能键
使用addEventLidtener 不需要加on
执行顺序:keydown——keypress——keyup
事件对象
keyCode 返回该键的ASCll值
onkeydown和onkeyup 不区分大小写,onkeypress区分大小写