• addEventListener


    addEventListener

    1. 概念:EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行

    2. 原理: 将实现 EventListener 的函数对象添加到调用它的 EventTarget 上的指定事件类型的事件侦听器列表中。

    3. 语法:

      • target.addEventListener(type, listener, options)
      • target.addEventListener(type, listener, useCapture)
      • target.addEventListener(type, listener, useCapture, wantsUntrusted ); // Gecko/Mozilla only
    4. 参数:

      1. type:监听事件类型的字符串

      2. listener:当监听事件触发时会收到一个事件通知对象。因此 listener 必须是一个实现了EventListener接口的对象,或者是一个函数

        1. EventListener 接口对象,对象中必须含有 handleEvent 属性,切为一个方法
            let obj = {
                //... 其他属性
                handleEvent: function() {
                    方式
                }
            }
            // 这样可以做一些自定义的东西
            let obj2 = {
                a: 1,
                handleEvent: function() {
                    console.log(this.a)
                }
            }
        
      3. options:一个指定有关 listener 属性的可选参数对象

        • capture: Boolean,表示 listener 会在该类型的事件捕获阶段传播到该 EventTarget 时触发(false 表示不捕获该过程,会继续往下走,为 true 表示需要捕获该过程)
        • once: Boolean,表示在添加事件后最多执行一次,如果该属性为 true,则在执行一次后立即销毁
        • passive:Boolean,表示 listener 永远不会调用 prevenDefault(),如果 listener 仍然调用了这个函数,那么会报警告(Unable to preventDefault inside passive event listener invocation.)
      <div class="line" id="line">
          <div class="left" id="left">left</div>
          <div class="right">right</div>
      </div>
      // 点击left执行顺序: body -》 left -》 line
      const leftDom = document.getElementById('left')
      const lineDom = document.getElementById('line')
      leftDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		e.preventDefault()
      		console.log('left', e.target)
      	},
      	{
      		capture: true,
      		passive: false,
      	}
      )
      lineDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('line', e)
      	},
      	{
      		capture: false,
      	}
      )
      document.body.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('body')
      	},
      	{
      		capture: true,
      	}
      )
      // 点击left执行顺序: body -》 line -》 left
      leftDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('left', e.target)
      	},
      	{
      		capture: true,
      	}
      )
      lineDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('line', e)
      	},
      	{
      		capture: true,
      	}
      )
      document.body.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('body')
      	},
      	{
      		capture: true,
      	}
      )
      // 点击left执行顺序: body -》 line -》 left
      leftDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('left', e.target)
      	},
      	{
      		capture: true,
      	}
      )
      lineDom.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('line', e)
      	},
      	{
      		capture: true,
      	}
      )
      document.body.addEventListener(
      	'click',
      	function (e) {
      		// e.stopPropagation()
      		console.log('body')
      	},
      	{
      		capture: true,
      	}
      )
      
  • 相关阅读:
    gRPC实战
    深入浅出docker
    jquery操作复选框(checkbox)的12个小技巧总结
    System.Diagnostics.Process.Start的妙用
    Redis持久化数据丢失及解决
    【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误"的解决办法
    asp.net 网页抓取内容
    Ajax学习资源大全[本来是转载的,但是现在我增加了很多]
    jquery如何判断checkbox(复选框)是否被选中
    JS获取屏幕高度
  • 原文地址:https://www.cnblogs.com/tutao1995/p/14278342.html
Copyright © 2020-2023  润新知