DOM事件小计
-
基本概念:DOM事件的级别
DOM0: element.onclick = function(){}
DOM2: element.addEventListener('click',function(){},false)
DOM3: element.addEventListener('keyup',function(){},false)
-
DOM事件模型
- 捕获
- 冒泡
-
DOM事件流
- 捕获 === > 目标阶段 ===> 冒泡
-
描述DOM事件捕获的具体流程
捕获具体流程(冒泡反之)
- window ===> document ===> html ===> body ===> …目标元素
演示捕获流程:
//body中新建一个id为ev的div,宽高背景自己设置下
var ev = document.getElementById('ev')
window.addEventListener('click',function(){
console.log('window captrue');
},true)//true为捕获阶段触发,false为冒泡阶段触发
document.addEventListener('click',function(){
console.log('document captrue');
},true)
document.documentElement.addEventListener('click',function(){
console.log('html captrue');
},true)
document.body.addEventListener('click',function(){
console.log('body captrue');
},true)
ev.addEventListener('click',function(){
console.log('ev captrue');
},true)
// 点击id为ev的div,查看控制台打印如下
window captrue
document captrue
html captrue
body captrue
ev captrue
// 打印顺序与注册顺序无关
-
Event对象的常见应用
- event.preventDefault() 阻止默认事件
- event.stopPropagation() 阻止冒泡
- event.stopImmediatePropagation() 事件响应优先级
- event.currentTarget 指向引起触发事件的元素
- event.target 事件绑定的元素
-
自定义事件(模拟事件)
var eve = new Event('custome');
element.addEventListener('custome',function(){
console.log('custome');
});
element.dispatchEvent(eve);
// 注意是事件对象eve而不是事件名custome
发表回复