当前位置: 首页 > news >正文

addEventListener()的第三个参数可以传对象了

在你的印象里是不是这样的target.addEventListener(type, listener[, useCapture])

新的语法

  1. target.addEventListener(type, listener [,{capture: Boolean, bubbling: Boolean, once: Boolean}]);

    • type 表示监听事件类型的字符串
    • listener 当所监听的事件类型触发时,会接收到一个事件通知
    • options (可选)
      1. capture 表示listener会在该类型的事件捕获阶段传播到该EventTarget 时触发。
      2. once 表示listener在添加之后最多只调用一次。如果是 true,listener会在其被调用之后自动移除。
      3. passive 表示listener永远不会调用preventDefault()。如果listener仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。

实例

html结构
<nav id="menu"><a href="https://juejin.im">首页</a></nav>
复制代码
获取引用
var nav = document.getElementById('menu')
var link = nav.firstElementChild
复制代码
capture: 表示listener会在该类型的事件捕获阶段传播到该EventTarget 时触发
menu.addEventListener('click', function (e) {
    console.log('menu clicked!')
}, { capture: true })
link.addEventListener('click', function (e) {
    e.preventDefault();
    console.log('link clicked!')
}, { capture: false })

// menu clicked!
// link clicked!
复制代码
once: 表示listener在添加之后最多只调用一次。如果是 true,listener会在其被调用之后自动移除
link.addEventListener('click', function (e) {
    e.preventDefault();
    console.log('link clicked!')
}, { capture: false,once:true })

//输出一次link clicked!后自动移除listener函数,再次点击无效。

复制代码
passive: 表示listener永远不会调用preventDefault()。如果listener仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告
link.addEventListener('click', function (e) {
    e.preventDefault();
    console.log('link clicked!')
}, { capture: false,passive:true })

//控制台输出:Unable to preventDefault inside 
passive event listener invocation. 
链接跳转
复制代码

使用 passive 改善的滚屏性能,添加passive参数后,touchmove事件不会阻塞页面的滚动(同样适用于鼠标的滚轮事件)

addEventListener('touchmove', function listener() {
/* do something */ }, { passive: true });
复制代码

兼容性

浏览器chromeFirefoxIE
capture49.049.0未实现
passive51.049.0未实现
once5550未实现

注意:那些不支持参数options的浏览器,会把第三个参数默认为useCapture,即设置useCapture为true

相关文章:

  • 11.11. SNMP
  • [2018-01-08] Python强化周的第一天
  • Zabbix备份数据文件
  • Shell 输入/输出重定向
  • 通用汽车新增130辆测试无人车,配激光雷达
  • 了解Web及网络基础(二)
  • 拉格朗日插值
  • HomeBrew常规使用教程
  • 递归函数的写法笔记
  • mysql手写sql 建库建表示例
  • Eonasdan bootstrap datetimepicker 使用记录
  • 新版本Jenkins安装时显示离线的问题
  • WEBGL学习【十四】利用HUD技术在网页上方显示三维物体
  • Hibernate映射——多对多关联映射(八)
  • kafka官方文档学习笔记1--基本概念了解
  • 【个人向】《HTTP图解》阅后小结
  • canvas 高仿 Apple Watch 表盘
  • CSS实用技巧
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ECS应用管理最佳实践
  • Git学习与使用心得(1)—— 初始化
  • Laravel5.4 Queues队列学习
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 关于List、List?、ListObject的区别
  • 技术胖1-4季视频复习— (看视频笔记)
  • 利用jquery编写加法运算验证码
  • 说说动画卡顿的解决方案
  • 想写好前端,先练好内功
  • 最简单的无缝轮播
  • Linux权限管理(week1_day5)--技术流ken
  • # Apache SeaTunnel 究竟是什么?
  • #include<初见C语言之指针(5)>
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (23)Linux的软硬连接
  • (26)4.7 字符函数和字符串函数
  • (C语言)共用体union的用法举例
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Python) SOAP Web Service (HTTP POST)
  • (初研) Sentence-embedding fine-tune notebook
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)http-server应用
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)树状数组
  • .form文件_SSM框架文件上传篇
  • .net 程序发生了一个不可捕获的异常
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ linux ] linux 命令英文全称及解释
  • [ NOI 2001 ] 食物链
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [Big Data - Kafka] kafka学习笔记:知识点整理