事件
语法:元素.addEvenListener('事件',要执行的函数);
取消事件绑定:元素.removeEventListener(事件,要执行的函数 );无法取消匿名函数的事件
事件监听三要素
- 事件源: 那个dom元素被事件触发了,要获取dom元素
- 事件: 用什么方式触发,比如鼠标单击 click、鼠标经过 mouseover 等
- 事件调用的函数: 要做什么事
事件类型
-
鼠标事件(鼠标触发)
- click 鼠标点击
- mouseenter 鼠标经过
- mouseleave 鼠标离开
- mousemove 鼠标移动
- mouseup 鼠标弹起
- mousedown 鼠标按下
-
焦点事件(表单获得光标)
- focus 获得焦点
- blur 失去焦点
-
键盘事件(键盘触发)
- keydown 键盘按下触发
- keyup 键盘抬起触发
-
文本事件(表单输入触发)
- input 用户输入事件
-
滚动事件:页面进行滚时触发
scroll
用法:window.addEventListener('scroll', function() {
//执行的操作
})
一般给window或者document添加
获取当前滚动的距离document.documentElement.scrollTop
pc端滚动条占17px
移动端混动条不占大小
-
加载事件:监听页面所有资源加载完毕
load
用法:window.addEventListener('load', function () {
//执行的操作
})
给window添加load事件
DOMContentLoaded
用法:document.addEventListener('DOMContentLoaded', function () {
//执行的操作
})
给doument添加DOMContentLoaded事件
阻止刷新属性 preventDefault
如:event.preventDefault();
事件流
事件流描述的是从页面中接收事件的顺序
事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流
捕获阶段:Document -> Element html -> Element body -> Element div
true btn.addEventListener('click',function() {
alret('你好');
},true)
冒泡阶段:Element div -> Element body -> Element html -> Document(常用)
false(默认不写) btn.addEventListener('click',function() {
alret('你好');
},false)
没有冒泡:blur、onfocus、onmouseenter、onmonuseleave
阻止冒泡:stopPropagation();
事件对象
- event 就是一个事件对象,写到我们监听函数的小括号里面,当形参来看
- 事件对象只有有了事件才会存在,他是系统给我们自动创建的,不需要我们传递参数
- 事件对象使我们事件的一系列数据的集合,跟事件相关的,比如鼠标点击里面就包含了鼠标的相关信息
- 这个事件命名比如:event、evt、e
获取事件对象
type:输出当前的事件类型
用法:event.type
clientX,clientY:返回鼠标的位置,参照物是页面的左上角
offsetX,offsetY:返回鼠标的坐标 参照物是被点击的元素的左上角
事件委托
优点:给父级元素加事件(可以提高性能) 原理:事件委托其实是利用事件冒泡的特点, 给父元素添加事件,子元素可以触发 实现:事件对象.target 可以获得真正触发事件的元素