事件下

145 阅读3分钟

事件的执行阶段

  • 捕获阶段(从body到目标元素的阶段)
  • 目标阶段(找到当前的目标元素执行事件)
  • 冒泡阶段(从目标元素到body的阶段)

image.png

事件的触发模式

冒泡模式(从目标元素执行到最外层的元素)(默认模式) (从里到外)

image.png

image.png 捕获模式(从最外层的元素执行到目标元素) (指定为捕获) (从外到里)

image.png

禁止事件冒泡

主要是为了执行当前的事件时 不触发外层相同的事件

  • stopPropagation event的方法

image.png

  • cancelBubble赋值 true event的属性

image.png

  • 兼容写法

image.png

image.png

默认行为

某些事件或者对应的标签在默认的特效 ,称为默认行为 如

  • a标签回跳转
  • img会拖动
  • form表带的submit会提交
  • contextmenu 会出现一个菜单栏
  • ....

有些时候我们不需要这些行为,那么我们就可以将这些行为进行禁止

禁止默认行为

  • preventDefault
 e.preventDefault()
  • returnValue 赋值为false
e.returnValue=false
  • 在处理函数内容直接返回false (一般放在处理函数最后)
return false

兼容写法

image.png


image.png

JavaScript中的三大家族

- offset家族

  • offsetParent 偏移的父元素
  • offsetWidth 当前元素的宽度(包含填充和边框)
  • offsetHeight 当前元素的高度(包含填充和边框)
  • offsetLeft 基于偏移的父元素的左偏移量
  • offsetTop 基于偏移父元素的上偏移量

- client家族

  • clientWidth 当前元素的宽度 (包含填充不包含边框)
  • clientHeight 当前元素的高度 (包含填充不包含边框)
  • clientTop 离上面边框的距离
  • clientLeft 离左边边框的距离

- scroll 家族

  • scrollTop 滚动栏离上面的距离
  • scrollLeft 滚动栏离左边的距离
  • scrollWidth 当前的元素的宽度 (包含填充和滚动距离)
  • scrollHeight 当前的元素的高度 (包含填充 和滚动栏距离)

事件监听器(eventListener)

事件监听器,使用了观察者模式(observer).它添加事件的一种方式 重点方法

  • addEventListener 添加事件监听器
  • removeEventListener 移除事件监听器 添加事件监听器

元素对象.addEventListener(事件名字符串,处理函数,是否冒泡)

移除事件监听器

如果对应的其中一个参数不相等 那么就不能移除

image.png

示例

image.png

dispatchEvent 派发事件 (执行事件)
  • eventListener和属性指定事件的区别
  • eventListener 一个事件可以指定多个处理函数,属性会覆盖
  • eventListener可以设置是否捕获 属性指定不行
  • eventListener添加的事件可以被移除 属性指定只能重新赋值 为null进行移除
  • eventListener添加的事件名可以任意书写 ,由dispatchEvent来触发

拖拽

全局拖拽

拖拽的相关事件

  • 按下事件 (nomousedown)
  • 移动事件 (onmousemove)
  • 弹起事件 (onmouseup)

思路

  • 给拖拽的元素添加按下事件
  • 在按下事件中记录鼠标在元素的位置(offsetX offsetY)
  • 在按下事件内容给全局(document)添加移动事件
  • 在全局的移动事件内记录每次移动的位置
  • 用移动的位置减去按下的位置得到对应的定位的位置
  • 在全局的移动事件内设置元素的定位
  • 再按下的事件内容给全局(document)添加弹起事件
  • 在弹起事件内容释放对应的移动事件和弹起事件

代码实现

image.png

局部拖拽

思路

  • 给拖拽的元素 添加鼠标按下事件
  • 在按下事件内获取按下的坐标 (offsetX、offsetY)
  • 给区域元素添加鼠标移动事件
  • 在移动事件内获取对应的坐标位 (pageX,pageY)
  • 计算对应的定位的坐标(移动坐标位-按下的坐标位-区域元素离页面的坐标位置)
  • 区间判断(大于最大位置 等于最大位置 小于0等于0)
  • 设置对应的拖拽元素的位置
  • 在鼠标按下事件中添加全局(document)的鼠标弹起事件
  • 在弹起事件内释放对应的弹起事件和移动事件的内存(赋值为null)

image.png