1,事件详解
1.1事件注册
给元素添加事件就称为注册事件,注册事件也成为绑定事件,注册事件有两种方式:
- 传统注册方式
- 监听注册方式
1.1.1传统注册
传统注册方式是通过指定事件源绑定回调函数的形式来处理时间,当指定事件触发后回调函数就会被调用,这样就可以实现页面和用户之间的交互了。
- 通过HTML元素指定属性来绑定
- 通过DOM对象指定的 属性绑定
1.1.2监听注册
通过事件监听来注册,称为设置事件监听器。通过EventTarget.addEventListener()方法来实现。EventTarget.addEventListener()将指定的监听器注册到eventTarget上,当该对象触发指定的事件时,指定的回调函数就会被执行。
target.addEventListener(type, listener, useCapture);
//type必须有,事件监听的类型,如click,mouseover
//listener必须有,是一个实现了eventlistener接口的对象,或者是一个函数
//useCapture可选,表示是冒泡还是捕获,值为true表示捕获,否则为冒泡
1.1.3两种注册比较
①如果使用传统方式进行注册,当同一个对象添加相同事件时,后面的时间会覆盖掉前面的事件,如果使用监听方式进行注册,当同一个对象绑定相同多个事件时,这些时间都会被执行。
②传统注册方式只能进行冒泡,不能进行捕获,而监听注册方式可以冒泡也可以捕获。
1.2解绑事件
对于传统的注册事件,解绑事件的语法为
eventTarget.事件类型 = null;
对于监听注册方式,解绑事件的语法为:
eventTarget.removeEventListener(type, listener, useCapture);
如果把解绑语句放到注册注册语句外,那么注册的事件将无效,如果放到注册事件代码中,那么会执行一次。
对于监听注册方式的解绑,需要注意事件类型和监听函数必须是相同的。
1.3事件流
事件流又称事件传播,描述的是从页面接收事件的顺序,当事件发生时惠子啊元素节点之间按特定的顺序传播,这个传播过程就叫DOM事件流。
事件流包括三个阶段:事件捕获阶段,处于目标阶段,事件冒泡阶段。
- 捕获阶段:从不确定事件源到确定事件源依次向下响应
- 目标阶段:真正的目标节点正在处理事件的阶段。
- 冒泡阶段:从明确事件源到不明确的事件源依次向上响应。
- JavaScript代码中只能执行捕获或冒泡其中一个阶段,要么冒泡要么捕获。
- onclick与attachevent方式注册的事件只有冒泡阶段。