JavascriptDOM事件

事件流:
  • 事件流描述的是从页面中接收事件的顺序。
    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 浏览器窗口改变触发事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值