Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?

Unable to preventDefault inside passive event listener due to target being treated as passive 怎么办?翻译一下:chrome监听touch类事件报错:无法被动侦听事件preventDefault,是新版本chrome浏览器报错。说明:说一下这个preventDefault()是个什么鬼,这个是取消默认事件的,如果这个函数起作用的,比如默认的表单提交,a链接的点击跳转,就不好用了。原因:google浏览器为了最快速的相应touch事件,做出的改变。历史:当浏览器首先对默认的事件进行响应的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

翻译一下:chrome 监听touch类事件报错:无法被动侦听事件preventDefault,是新版本chrome 浏览器报错。
说明:说一下这个 preventDefault()是个什么鬼,这个是取消默认事件的,如果这个函数起作用的,比如默认的表单提交,a链接的点击跳转,就不好用了。

原因:google浏览器为了最快速的相应touch事件,做出的改变。
历史:当浏览器首先对默认的事件进行响应的时候,要检查一下是否进行了默认事件的取消。这样就在响应滑动操作之前有那么一丝丝的耽误时间。
现在:google就决定默认取消了对这个事件的检查,默认时间就取消了。直接执行滑动操作。这样就更加的顺滑了。
但是浏览器的控制台就会进行错误提醒了。

具体情况:
从 chrome56 开始,在 window、document 和 body 上注册的 touchstart 和 touchmove 事件处理函数,会默认为是 passive: true。浏览器忽略 preventDefault() 就可以第一时间滚动了。

导致下面的效果一致:

wnidow.addEventListener('touchmove', func) 效果和下面一句一样
wnidow.addEventListener('touchmove', func, { passive: true })

Jetbrains全家桶1年46,售后保障稳定

这样会出现新的问题:

如果在以上这 3 个元素的 touchstart 和 touchmove 事件处理函数中调用 e.preventDefault() ,会被浏览器忽略掉,并不会阻止默认行为。

各位亲人们可以测试一下:

body {
  margin: 0;
  height: 2000px;
  background: linear-gradient(to bottom, red, green);
}

// 在 chrome56 中,照样滚动,而且控制台会有提示,blablabla
window.addEventListener('touchmove', e => e.preventDefault())

那么我们这些小程序员该怎么办呢???

可以做到:

即不让控制台提示,而且 preventDefault() 有效果呢?

两个方案:

1、注册处理函数时,用如下方式,明确声明为不是被动的
window.addEventListener(‘touchmove’, func, { passive: false })

2、应用 CSS 属性 touch-action: none; 这样任何触摸事件都不会产生默认行为,但是 touch 事件照样触发。
touch-action 还有很多选项,
详细请参考:touch-action

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200880.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat请求码无生成激活码【2021免费激活】「建议收藏」

    (navicat请求码无生成激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~0VOE…

    2022年3月31日
    426
  • hashmap put过程面试_面试时问你base在哪儿

    hashmap put过程面试_面试时问你base在哪儿一个HashMap能跟面试官扯上半个小时关注安琪拉的博客1.回复面试领取面试资料2.回复书籍领取技术电子书3.回复交流领取技术电子书前言HashMap应该算是Java后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的Java基础。开场面试官:你先自我介绍一下吧!安琪拉:我是安琪拉,草丛三婊之一,最强中单(钟馗不服)!哦,不对,串场了,我是**,目…

    2022年8月22日
    6
  • 【转】下载太慢?简单设置让iTunes提速十几倍「建议收藏」

    【转】下载太慢?简单设置让iTunes提速十几倍「建议收藏」原文网址:http://www.startos.com/mac/ipad/tips/2010120713291.html今年可以说是苹果欢笑的一年,ipad的发布,iphone4的成功,让用苹果设备

    2022年8月6日
    10
  • [计算机网络]RJ45直通线和交叉线的连接方式和设备类型解析

    [计算机网络]RJ45直通线和交叉线的连接方式和设备类型解析本文将讨论网线的组成,他们的连接方式,以及为啥连接同类型的设备要用交叉线,不同的设备用直通线以及早起交换机阵脚是反的原因

    2022年6月19日
    28
  • 图解GitHub和SourceTree 入门教程 使用教程

    图解GitHub和SourceTree 入门教程 使用教程–>本教程适用于github和bitbucket和gitee等主流代码托管仓库,个人认为sourceTree还是比较好用的git客户端,支持windows和macos,当然也不排斥使用纯命令行的朋友。sourceTree配合高级的命令行,可以很方便快速的应用到项目中。–>soureceTree的最新版本可能与此教程的screenshot有些许不同,但大同小异(source…

    2022年7月25日
    17
  • (三)hadoop系列之__CRT(SecureCRTPortable)的使用

    (三)hadoop系列之__CRT(SecureCRTPortable)的使用  SecureCRTPortable属于终端仿真程序,支持SSH(查看此处http://blog.csdn.net/macrossdzh/article/details/5691924)协议。利用CRT可以很方便操作虚拟机终端。进入正题……1.首先,下载SecureCRTPortable软件。2.直接执行SecureCRTPortable.exe文件即可。3.执…

    2022年5月23日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号