DOM事件的级别:
DOM0:元素.onclick=function(){}。
DOM2:元素.addEventListener(‘click’,function(){},false), false,代表事件冒泡。
DOM3:就是比DOM2级事件多了很多事件类型,如鼠标事件,键盘事件型。
DOM事件模型:
包括捕获和冒泡(ie用的是事件冒泡),捕获是从上往下到达目标元素,冒泡是从当前元素,也就是目标元素往上到window,是两个过程。
事件流是什么/浏览器事件流向:
指事件在页面中传播的顺序,包括:捕获阶段,目标阶段,冒泡阶段。
DOM0级事件的事件流:只有事件冒泡阶段,没有捕获阶段。给同一元素绑定相同的事件,后面的会覆盖前面的。
DOM2级事件的事件流包括三个阶段:
(1)捕获阶段(2)目标阶段(3)冒泡阶段。
捕获阶段:从外到内依次查找到该元素(从window——>document——>html——>body——>),如果父级元素在此阶段有绑定函数,就会让函数执行(看事件处理程序函数的第三个参数)。
目标阶段:当前元素本身的操作。
冒泡阶段:从内到外依次触发事件行为,如果父级元素在此阶段有绑定函数,就会让函数执行(看事件处理程序函数的第三个参数)。
描述DOM事件捕获的流程:
捕获是从上到下,具体第一个真正接收的是window(对象)——第二个接收的是document(对象)——第三个接收的是html标签(怎么获取html标签>document.documentElement)——第四个接收的是body(document.body)——......(父级--子级,剩下的就是按照普通的html结构一层一层往下传)——最后到达目标元素。
(第一个接收到事件的对象是window
从window——>document——>html——>body——>父级元素——>…——>最后到目标元素)
如何获取html标签:document.documentElement;
如何获取body标签:document.body;
描述DOM事件冒泡的流程:
第一个接收的是目标元素——第二个接收的是...(子级--父级,按照html结构一层一层往上传)——然后接收的是body标签——html标签——document对象——最后一个接收的是window对象。
(目标元素——>上一级元素…——>body——>html——>document——>window)
事件在哪个阶段绑定,就在哪个阶段执行。
event对象的常见应用:
event.preventDefault()——>阻止默认事件,如阻止a标签的默认跳转。
event.stopPropagation()——>阻止冒泡,不想让父元素冒泡(如你想单击子元素让它做一件事情,想单击父元素让它做另一件事情,就阻止子元素的冒泡)。
特殊的方法:event.stopImmediatePropagation()——>事件响应优先级:
如一个元素的onclick事件绑定了多个函数(使用DOM2级),你想要哪个事件执行, 其他事件不执行,就在要执行的事件里写上event.stopImmediatePropagation(),就只有这个事件执行,阻止其他事件的执行。
event.currentTarget——>被绑定事件的元素(一般是父元素)。
event.target——>被点击的元素。
事件委托/事件代理的原理是什么,有什么好处/介绍下事件代理,主要解决什么问题:
利用事件的冒泡传播,将事件处理程序的函数绑给最高级,通过判断事件源(e.target)是谁来进行不同的操作。
好处:
1.减少了内存消耗,不必为大量元素绑定事件;
2.新添加的子元素也会有之前的事件;
介绍事件代理以及优缺点:
优点如上;
缺点是:
1.部分事件如focus,blur等无冒泡机制,所以无法委托;
2. 事件委托有对子元素的查找过程,委托层级过深,可能会有性能问题;
3.频繁触发的事件,如mousemove,mouseout,mouseover等,不适合事件委托;