十七、事件

事件

1、事件流

1.1事件冒泡

	事件从被点击的元素最开始触发,然后沿着DOM树往上依次触发到document对象

事件冒泡

1.2事件捕获

事件从document元素开始,沿着DOM树向下传播,直至目标元素。

事件捕获

1.3DOM事件流

事件捕获+到达目标+事件冒泡

2.事件处理程序

用户或者浏览器执行某种动作

2.1HTML事件处理程序

<button onClick="console.log(this.value)" value="click me"/>

不能直接使用未转义的HTML格式字符
作用域链通过with被扩展

function (){
	with(document){
		with(this.form){
			with(this){
			...
			}
		}
	}
}

2.2DOM0事件处理程序

讲一个函数赋值给DOM元素的一个事件处理属性上

var btn = document.getElementById('myBtn');
btn.onclick = function (){console.log('click')};

2.3 DOM2事件处理程序

addEventListener(type, handler, runAtCapture=false);
removeEventListener(type, handler, runAtCaptrue);

2.4 IE事件处理程序

attachEvent(type, handler)// type starts with 'on', such as onClick
detachEvent(type, handler)
// 采用事件冒泡

2.5 跨浏览器事件处理程序

var EventUtil = { 
	 addHandler: function(element, type, handler) { 
		 if (element.addEventListener) { 
		 	element.addEventListener(type, handler, false); 
		 } else if (element.attachEvent) { 
		 	element.attachEvent("on" + type, handler); 
		 } else { 
		 	element["on" + type] = handler; 
		 } 
	 }, 
	 removeHandler: function(element, type, handler) { 
		 if (element.removeEventListener) { 
		 	element.removeEventListener(type, handler, false); 
		 } else if (element.detachEvent) { 
		 	element.detachEvent("on" + type, handler); 
		 } else { 
		 	element["on" + type] = null; 
		 } 
	 } 
}; 

3.事件对象

3.1 DOM事件对象

在DOM合规的浏览器中,event是传给事件处理程序的唯一参数

属性/方法类型说明
bubblesboolean表示事件是否可以冒泡
cancelableboolean事件是否可以取消默认行为
currentTargetElement当前处理程序所在元素
defaultPreventedBoolean是否已经调用过preventDefault()
detail其他相关信息
eventPhaseint事件所处阶段 1捕获 2到达目标 3冒泡
preventDefault()Function取消默认行为
stopImmediatePropagation()Function取消后续所有事件捕获或者冒泡
stopPropagation()取消后续事件的捕获或者冒泡,bubbles为true时可用
targetElement事件目标元素
trustedbooleantrue表示事件是浏览器生成的,false表示是开发者创建的
typestring事件类型
viewAbstractView与事件相关的抽象视图,即事件发生的window对象

在事件处理程序内部,this始终等于currentTarget,而target则是指事件的实际目标

3.2 IE事件对象

如果是按照DOM0方式指定事件处理程序,则event是window的一个属性;如果是通过“attachEvent/detachEvent”指定,则event是回调函数唯一参数

属性/方法类型说明
cancelBubbleboolean默认为false, 设置为true时取消冒泡
returnValueboolean默认为true,设置为false取消事件默认行为
srcElementElement与target相同
typestring类型

由于作用域取决于指定方式,所以this并不总是等于事件目标,建议使用srcElement代替this

4.事件类型

说明
UIEvent与BOM交互DOMActivate、load、unload、abort、error、select、resize、scroll
FocusEvent获得和失去焦点blur,DOMFocusIn,DOMFocusOut,focus,focusin, focusout
MouseEvent鼠标事件click,dblclick,mousedown, mouseenter, mouseleave, mouseout, mouseover, mouseup
WheelEvent滚轮事件
InputEvent输入事件
KeyboardEvent键盘事件keyDown, keyPress, keyup
CompositionEvent在使用某种IME输入字符时的事件compositionstart, compositionend, compositionupdate

abort:在<object>元素上当相应对象加载完成前被用户提前终止下载时触发。
select:在文本框(<input>或 textarea)上当用户选择了一个或多个字符时触发

客户端坐标:event.clientX/event.clientY
页面坐标:event.pageX/event.pageY
屏幕坐标:event.screenX/event.screenY
键盘修饰键:event.shiftKey/ctrlKey/altKey/metaKey

HTML5事件

contextmenu

显示上下文菜单事件

beforeunload

页面被卸载之前,在window上会被触发

DOMContentLoaded

页面完全加载后触发

readystateChange

文档或者元素的加载状态发生变化时触发,readyState的属性值有
uninitialized、loading、loaded、interactive、complete

pageShow pageHide(firefox)
hashchange

h5新增,必须添加给window

设备事件

orientationchange 事件

判断设备是垂直模式还是水平模式

deviceorientation 事件
devicemotion事件

5.内存与性能

5.1事件委托

5.2删除事件处理程序

6.模拟事件

通过js在任意时刻触发任意类型事件

DOM事件模拟

let event = document.createEvent(eventType)
target.dispatchEvent(event)

IE事件模拟

var btn = document.getElementById("myBtn"); 
// 创建 event 对象
var event = document.createEventObject(); 
/// 初始化 event 对象
event.screenX = 100; 
event.screenY = 0; 
event.clientX = 0; 
event.clientY = 0; 
event.ctrlKey = false; 
event.altKey = false; 
event.shiftKey = false; 
event.button = 0; 
// 触发事件
btn.fireEvent("onclick", event); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风xs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值