事件高级

事件注册有两种:区别在于
传统注册事件:唯一性。同一个对象同一个元素只能设置一个处理函数,后注册的函数将会覆盖前注册的函数。
方法监听注册事件:w3c标准 addEventListener 监听器指的就是监听处理函数,按注册顺序依次执行。有兼容性问题。
IE独有的:ie9之前版本支持的注册事件方式:attachEvent('onclik',function(){}) 移除detachEvent()

addEventListener(type,listener,usecapture)
type:事件类型字符串,'click'
uescapture:默认false 冒泡

addEventListener('click',function(){

})

事件解绑:
传统:divs[0].onclik=null;
监听方式:removeEventListener('click',fn) 不能采取匿名函数,fn不需要加()调用。

DOM事件流三阶段:捕获阶段、目标阶段、冒泡阶段。(往水里扔石头)
冒泡:son-father-body-html-document
js事件只能执行捕获或者冒泡其中一个阶段
onclick attachEvent只能得到冒泡
而addEventListener可以设置捕获或者冒泡

有些事件是没有冒泡的,比如onblur,onfocus,onmouseenter
但有时冒泡可以带来奇妙的效果

事件对象

  1. event 就是一个事件对象 写到我们侦听函数的 小括号里面 当形参来看
  2. 事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数
  3. 事件对象 是 我们事件的一系列相关数据的集合 跟事件相关的。比如鼠标点击里面就包含了鼠标的相关信息,鼠标坐标啊,如果是键盘事件里面就包含的键盘事件的信息 比如 判断用户按下了那个键
  4. 这个事件对象我们可以自己命名 比如 event 、 evt、 e
  5. 事件对象也有兼容性问题 ie678 通过 window.event 兼容性的写法 e = e || window.event;

e.target 返回的是触发事件的对象 ,点击了谁就返回谁,比如返回


  • this 返回的是绑定事件的对象(元素),绑定了谁就返回谁

      e.type返回事件类型,比如mouseover,不带on

      鼠标事件对象 键盘事件对象
      e.clientX 可视区鼠标X坐标(不管屏幕滚不滚动)
      e.pageX 页面文档(距离文档的距离,滚动)
      e.creenX 电脑屏幕

      阻止默认行为(比如让链接不调整,让提交按钮不提交)
      e.preventDefault()方法
      return false 也能阻止默认行为 没有兼容性问题 特点: return 后面的代码不执行了, 而且只限于传统的注册方式

      阻止事件冒泡的方式
      e.stopPropagation()方法

      事件委托原理:不是给每个子节点单独设置事件监听器,而是给父节点设置事件监听器,然后利用冒泡原理影响每个子节点
      事件委托的作用:只操作一次DOM,提高程序性能。
      结合e.target使用,子节点=e.target.当点击,事件会有冒泡的。

      常用的鼠标事件 配合e.preventDefault
      比如禁止复制 'contextmenu' 禁用右键菜单
      禁止选择文字 'selectstart
      鼠标移动事件 'mousemove'

      posted @ 2020-12-11 15:26  乔木啦啦  阅读(96)  评论(0)    收藏  举报