事件流:
-
事件流描述的是从页面中接收事件的顺序。
IE团队 的事件流是事件冒泡流。
而Netscape Communicator 的事件流是事件捕获流。 -
事件捕获:
如果你单击了页面中的元素,那么这个 click 事件会按照如下顺序传播
(1) document
(2) html
(3) body
(4) div -
事件冒泡:
(1) div
(2) body
(3) html
(4) document
事件流
DOM2级事件规定的事件流包括三个阶段:
事件捕获阶段、处于目标阶段和 事件冒泡阶段。
事件处理程序
- HTML事件处理程序
某个元素支持的每种事件,都可以使用一个HTML 特性来指定,这个特性与相应事件处理程序同名。
这个 特性的值应该是能够执行的 JavaScript代码。
<input type="button" value="Click Me" onclick="alert('Clicked')" />
// 当点击按钮的时候alert()函数触发
DOM2事件处理程序
1 给DOM的一个特殊属性赋值一个处理函数
2 btn.addEventListener(“click”, function(){ alert(this.id); }, false); 传递true事件流为事件捕获。
事件对象
一、在事件处理程序内部, e.target 获取真正触发事件的元素。
二、currentTarget 获取绑定事件的元素。
this指向永远和currentTarget指向一致(只考虑this的普通函数调用)
offsetX:鼠标指针相对于目标界面左侧的边框内沿,也就是紧挨着padding外沿的距离。
获取盒子位置公式
如果对文档坐标和视口坐标理解不透的参考我的博文 https://blog.csdn.net/weixin_44811301/article/details/104030518
-
e.clientX e.clientY(视口坐标) 用来获取鼠标在浏览器可视区的位置。如果是移动端 参考移动端的屏幕的可视区。
-
e.pageX e.pageY(文档坐标) 用来获取鼠标在文档中的位置。
-
也可以通过clientX/Y计算: 鼠标在文档中的位置 = e.clientX/Y鼠标在浏览器可视区位置 + 文档滚动出去的距离
-
获取文档滚动出去的距离
var scrollTop = document.documentElement.scrollTop
var scrollLeft = document.documentElement.scrollLeft
e.screenX/ e.screenY: 是手指的触摸点相对于设备(和浏览器可视区有区别)左上角的坐标距离。
和浏览器可视区有区别: 比方说把浏览器缩小放到中间。做获取还是参照屏幕取值。
e.offsetX/e.offsetY 鼠标点击元素 获取鼠标点击元素的当前坐标。
鼠标在盒子上的某个点按下 ,拖动盒子, 盒子跟着鼠标移动的基本原理
第一步 :获取鼠标在盒子中的位置 = 鼠标在文档上的位置 - 盒子在文档上的位置
第二步 :获取偏移量 鼠标在文档上的位置 - 鼠标在盒子中的位置。
第三步:设置偏移量
事件委托:
应用场景: 对"事件处理程序过多"问题的解决方案就是事件委托。
原 理: 事件委托利用了事件冒泡,
例如: 给ul下的每个li注册事件,那么不用循环遍历注册了,给ul元素注册就行了。
由于所有列表项都是这个UI元素的子节点,而且li的事件会冒泡,所以单击事件最终会被这个函数处理。
简单:当子元素的事件冒泡到父ul元素时,你可以检查事件对象的target属性,捕获真正被点击的节点元素的引用。
移除事件
btn.onclick = null; //移除事件处理程序
阻止事件冒泡
e.stopPropagation(); 添加到子元素的事件上
事件类型 DOM3中规定了一下几类事件
- UI(User Interface,用户界面)事件,当用户与页面上的元素交互时触发;
- 焦点事件,当元素获得或失去焦点时触发;
- 鼠标事件,当用户通过鼠标在页面上执行操作时触发;
- 滚轮事件,当使用鼠标滚轮(或类似设备)时触发;
- 文本事件,当在文档中输入文本时触发;
- 合成事件,当为 IME(Input Method Editor,输入法编辑器)输入字符时触发;
H5新增事件
-
鼠标事件
click 点击事件
mouseenter 鼠标经过
mouseleave 鼠标离开 不会触发事件冒泡。
mouseover 鼠标移入
mouseout 鼠标移出 会触发事件冒泡。
onmousedown 鼠标按下的事件
onmouseup 鼠标弹起的事件 鼠标在文档中触发事件。
onmousemove 鼠标在元素内部移到时不断触发 鼠标指针在文档中触发。不能通过键盘触发。 -
键盘事件
获取键盘码: e.keyCode
onkeydown 键盘按下的事件
onkeyup 键盘弹起的事件
onfocus 文本框 获得焦点
onblur 文本框是失去焦点 -
window窗口事件
window.onscroll 滚动事件监听
window.onresize 浏览器窗口改变触发事件