【web前端】passive是个啥?

1.passive是个啥?

passive是监听事件时候新增的一个选项
以前js中监听事件是这样写的

addEventListener(type, listener[, useCapture ])

第一个参数是要监听的事件类型,第二个参数是事件的回调函数,第三个参数是是否允许事件捕获

现在监听事件这样写

 addEventListener(type, listener, {
    capture: false, 
    passive: false, 
    once: false 
})

第三个参数变成了一个对象,有三个属性,
第一个capture就是之前的useCapture,
第二个passive就是咱们今天要说的主角

2.passive有什么作用?

passive就是为了改善移动端滚屏性能而设计的
简单说就是如果你监听了window的scroll或者touchmove事件,你应该把passive设置为true,这样滚动就会流畅很多,像这样

elem.addEventListener('touchmove', function listener() { /* do something */ }, { passive: true })

3.passive的原理

passive为false时,浏览器执行完回调函数才知道有没有调用preventDefault,如果没有调用preventDefault,再去执行默认行为,就是滚动。这样就回造成滚动不流畅。
passive为true,就是告诉浏览器不会调用preventDefault,浏览器直接执行滚动就行,不用考虑回调函数了。
这时,即使你在回调函数里调用preventDefault也不会生效。
mdn中说,在有些浏览器(特别是Chrome和Firefox)中,你监听window、document或者document.body上的touchstart和touchmove,会将passive默认设置为true。
还是要提醒大家,在你不需要调用preventDefault的时候,监听scroll或者touchmove,将passive设置为true

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,752评论 1 11
  • 本节介绍各种常见的浏览器事件。 鼠标事件 鼠标事件指与鼠标相关的事件,主要有以下一些。 click 事件,dblc...
    许先生__阅读 2,913评论 0 4
  • _________________________________________________________...
    fastwe阅读 1,464评论 0 0
  • Mobile Web Favorites 参与贡献 移动前端开发收藏夹,欢迎使用Issues以及 Pull Req...
    柴东啊阅读 988评论 0 2
  • 自从剃了光头之后,我总是习惯戴个帽子,在家还好,出门不戴帽子,简直觉得抬不起头,最近看了道长和冯唐,也都不戴帽子,...
    巴赛阅读 165评论 0 1

友情链接更多精彩内容