资讯专栏INFORMATION COLUMN

Passive Event Listeners——让页面滑动更加流畅的新特性

XanaHopper / 2479人阅读

摘要:这是因为版本以后,增加了新的事件捕获机制就是告诉前页面内的事件监听器内部是否会调用函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。

Passive Event Listeners - 被动事件监听器

在写webapp页面的时候,Chrome 提醒 

[Violation] Added non-passive event listener to a scroll-blocking "touchstart" event. Consider marking event handler as "passive" to make the page more responsive.

翻译过来如下:

违反:没有添加被动事件监听器来阻止"touchstart"事件,请考虑添加事件管理者"passive",以使页面更加流畅。

出现如上提示这可能是由于console的过滤器选择了Verbose

Verbose-冗长,就是事无具细的把所有log显示出来

Info-显示开发者自定义的log及错误信息

Warnings-显示危险信息

Errors-显示错误信息

一般默认的是Info,不会提示这个提醒,虽然这并不影响代码的正常运行,但 是既然提醒了还是弄明白是什么原因的好一些。

这是因为Chrome51版本以后,Chrome增加了新的事件捕获机制-Passive Event Listeners

Passive Event Listeners就是告诉前页面内的事件监听器内部是否会调用preventDefault函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。当属性passive的值为true的时候,代表该监听器内部不会调用preventDefault函数来阻止默认滑动行为,Chrome浏览器称这类型的监听器为被动(passive)监听器。目前Chrome主要利用该特性来优化页面的滑动性能,所以Passive Event Listeners特性当前仅支持mousewheel/touch相关事件

以前的事件捕获代码如下:

document.addEventListener("click", fn, false/true)

第三个参数决定了fn函数是在冒泡还是捕获阶段触发。
现在第三个参数不但可以是布尔值,还可是一个对象

document.addEventListener("mousewheel", fn, {passive: true})

由于passive对象只在Chrome浏览器中支持,所以这里需要做一个兼容处理

var passiveSupported = false;
    try {
        var options = Object.defineProperty({}, "passive", {
            get: function() {
                passiveSupported = true;
            }
        });
        window.addEventListener("test", null, options);
    } catch(err) {}
    function fn() {
        console.log("fn")
    }
    document.addEventListener("mousewheel", fn, passiveSupported ? { passive: true } : false)

再看Chrome调试会发现,Chrome已经不要提醒让人头的提醒。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87126.html

相关文章

  • vue的源码解析(passive特性,感觉是面试加分项)

    摘要:突然发现一个特性。这里核心是检查是否支持,是什么提出的一个新的浏览器特性开发者通过一个新的属性来告诉浏览器,当前页面内注册的事件监听器内部是否会调用函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。 今天我看源码,因为一边看一边记笔记所以看的慢。突然发现一个特性。所以单独开一篇。感觉是一个秀bigger的特性,如果有一天面试官问你发现优化页面的时候,你提出可...

    0x584a 评论0 收藏0
  • vue的源码解析(passive特性,感觉是面试加分项)

    摘要:突然发现一个特性。这里核心是检查是否支持,是什么提出的一个新的浏览器特性开发者通过一个新的属性来告诉浏览器,当前页面内注册的事件监听器内部是否会调用函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。 今天我看源码,因为一边看一边记笔记所以看的慢。突然发现一个特性。所以单独开一篇。感觉是一个秀bigger的特性,如果有一天面试官问你发现优化页面的时候,你提出可...

    phodal 评论0 收藏0
  • vue的源码解析(passive特性,感觉是面试加分项)

    摘要:突然发现一个特性。这里核心是检查是否支持,是什么提出的一个新的浏览器特性开发者通过一个新的属性来告诉浏览器,当前页面内注册的事件监听器内部是否会调用函数来阻止事件的默认行为,以便浏览器根据这个信息更好地做出决策来优化页面性能。 今天我看源码,因为一边看一边记笔记所以看的慢。突然发现一个特性。所以单独开一篇。感觉是一个秀bigger的特性,如果有一天面试官问你发现优化页面的时候,你提出可...

    Karrdy 评论0 收藏0
  • passive的作用和原理

    摘要:直接由合成线程处理的事件不经过内核线程就能快速处理的输入事件为手势输入事件滑动捏合。划重点最骚的来了,虽然手势事件可以不在内核线程处理,但是手势事件的产生还是离不开内核线程。 passived到底有什么用? passived主要用于优化浏览器页面滚动的性能,让页面滚动更顺滑~~ passived产生的历史时间线 addEventListener():大家都是认识的,为dom添加触发事件...

    nanchen2251 评论0 收藏0
  • 滑动穿透(锁body)终极探索

    摘要:场景当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动然而事实并非如此。当属性的值为的时候,代表该监听器内部不会调用函数来阻止默认滑动行为,浏览器称这类型的监听器为被动监听器。 场景 当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。showImg(https://user-gold-cdn.xitu.io...

    Michael_Lin 评论0 收藏0

发表评论

0条评论

XanaHopper

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<