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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 41-新的信号注册函数 sigaction

    41-新的信号注册函数 sigaction在这之前,我们一直使用signal来注册信号处理函数,而且一开始我甚至都没有提起过甚至signal还有一个兄弟——sigaction.我相信,把sigaction放到这里是适合的,因为你已经具备了足够的基础去理解它了。1.sigaction函数不同于signal函数,sigaction函数是符合POSIX标准的,而signal只是ANSIC标准函数。除了上面的区

    2022年5月25日
    36
  • 锂电池充电器电源芯片_4056充电芯片

    锂电池充电器电源芯片_4056充电芯片锂电池充电管理芯片模块开源:1,单节锂电池,标称3.7V,充满4.2V,也有4.35V7款模块的编号是:36,1,3,41,43,2,422,两节锂电池,标称7.4V,充满8.4V5款模块的编号是:38,39,33,40,53,三节锂电池,标称11.1V(10.8V),充满12.6V6款模块的编号是:34,37,8,6,7,31,4,四节锂电池,标称14.8V,充满16.8V2款模块的编号是:35,3236号模块板:单节锂电池充电0.5A,加输…

    2022年10月4日
    2
  • RocketMQ和Kafka应用场景与选型[通俗易懂]

    RocketMQ和Kafka应用场景与选型[通俗易懂]1、适用场景kafka适合日志处理rocketmq适合业务处理结论:两者没有区别,根据具体业务定夺2、性能kafka单机写入TPS号称在百万条/秒rocketmq大约在10万条/秒结论:追求性能方面,kafka单机性能更高3、可靠性kafka使用异步刷盘方式,异步Replicationrocketmq支持异步/同步刷盘,异步/同步Replication结论:rocketmq所支持的同步方式提升了数据的可靠性4、实时性kafka和rocketmq均支持pull长轮询,rocketmq

    2022年10月14日
    4
  • MySQL安装及配置详细教程

    MySQL安装及配置超详细教程首先下载安装包[网址](https://dev.mysql.com/downloads/file/?id=476233)进入页面后可以不登录。后点击底部”Nothanks,juststartmydownload.”即可开始下载。安装:直接把压缩包解压到你想安装的路径即可,相当于不用安装,可以看到我的解压路径在D盘的ROUTE文件夹下的mysq…

    2022年4月8日
    52
  • directx修复工具强力修复(Linux可用的工具)

    DirectX修复工具最新版:DirectXRepairV3.7增强版  NEW!版本号:V3.7.0.26539大小:107MB/7z格式压缩,189MB/zip格式压缩,322MB/解压后其他版本:标准版   在线修复版MD5校验码:DirectXRepair.exe/0615325098da4e624ef854af60b56ba2       DirectX_…

    2022年4月10日
    366
  • windows安装wget命令_wget怎么用

    windows安装wget命令_wget怎么用在linux操作系统中,我们会经常要用到wget下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性。在linux中使用wget时,若报-bash:wget:commandnotfound,则表明没有安装wget,需要安装,安装命令如下:yum-yinstallwget安装完成即可以使用。…

    2022年8月31日
    6

发表回复

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

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