事件
全局时间
事件环境
- 元素监听事件
- DOM0
- DOM1
- 自定义事件
基础知识点
事件种类
点击类 | |||
---|---|---|---|
click | |||
dblclick | |||
mouseup | |||
mousedown |
拖拽类 | DOM2 名称 | DOM0 名称 | 说明 |
---|---|---|---|
拖动 | drag | ondrag | 当拖动元素或选中的文本时触发。 |
拖动结束 | dragend | ondragend | 当拖拽操作结束时触发 |
dragenter | ondragenter | 当拖动元素或选中的文本到一个可释放目标时触发(见 | |
dragexit | ondragexit | 当元素变得不再是拖动操作的选中目标时触发。 | |
dragleave | ondragleave | 当拖动元素或选中的文本离开一个可释放目标时触发。 | |
dragover | ondragover | 当元素或选中的文本被拖到一个可释放目标上时触发(每100毫秒触发一次)。 | |
dragstart | ondragstart | 当用户开始拖动一个元素或选中的文本时触发(见开始拖动操作)。 | |
drop | ondrop | 当元素或选中的文本在可释放目标上被释放时触发(见执行释放)。 | |
事件冒泡
documnet.addEventListener('click', callback, 冒泡开关/true/false);
false - 事件冒泡的走向是由 子节点向父节点 触发同名事件
true - 事件冒泡的走向是由 父节点向子节点 触发同名事件
一、自定义事件
//创建一个 event_name事件,不传递数据
const tar = new Event('event_name');
//创建一个传递数据的事件,必须传入一个option { detail:{../} }作为容器
const tarWithData = new CustomEvent('event_name',{detail:{data:'data'}});
//option
{
detail:{//此处存放要传输的数据},
bubbles: true, //是否冒泡
cancelable: false //是否取消默认事件
}
//监听一个 event_name 事件
xxxx.addEventListener('event_name',(e)=>{
e.detail.xxx //读取对应的内容
}));
二、元素事件绑定&移除
DOM 0级事件绑定
相当于给一个元素的属性赋值,只能赋一个值,后面如果再赋值就会覆盖前面的值,所以说DOM0级事件只可以绑定一次,如果绑定多次,后面的会把前面的给覆盖了,因为是一个赋值的过程,一个属性只能赋一个值
语法:
元素.事件行为=函数 document.{标签名} = eventCallback
// 元素.事件行为=函数
document.{标签名} = eventCallback
// 绑定
document.body[`on${event}`] = e => {
e.stopPropagation();
e.preventDefault();
if (callback) callback(e);
};
// 移除
// 元素的事件行为,本身默认值就是null,把null这个值赋值回去就可以了
document.body[`on${event}`] = null
特点:
- DOM0级事件都是在冒泡阶段发生的
- 一个元素只能绑定一个事件函数
- DOM0级事件兼容任何浏览器
- 所有事件均以
onXxxx
命名
DOM 2级事件绑定
DOM2级事件有兼容性(attachEvent),现在微软已经放弃IE8及以下了,所以一般我们很少对它做处理了,但是个别的要进行处理,所以我们要进行判断一下,window下如果有addEventListener我们就用addEventListener,如果没有我们就不用addEventListener
语法:
eventTarget.addEventListener(
eventTag:string, // 事件名称
eventCallback:Function, // 回调函数
capTrue:boolean = false // 是否冒泡
)
capTrue
false - 事件冒泡的走向是由 子节点向父节点 触发同名事件
true - 事件冒泡的走向是由 父节点向子节点 触发同名事件
// 事件绑定,可以绑定多个事件
const body=document.body
body.addEventListener('click', callback1, true)
body.addEventListener('click', callback2, true)
// 解除绑定
body.removeEventListener('click', callback2) // 仅移除callback2,这里不影响callback1
特点:
- 级事件同一个事件行为可以绑定多个函数,执行顺序与绑定顺序相同
兼容IE
// 先触发 后定义 IE7 8弃用
element.attachEvent(type,callback) - 事件监听函数1
(删除监听)detachEvent(event,callback)
if(typeof btn.addEventListener === 'function'){
btn.addEventListener('click',fn);
}else if(typeof btn.attachEvent === 'function'){
btn.attachEvent('onclick',fn)
}else{
btn.onclick=function(){
// do something
}
}