博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阻止微信浏览器下拉滑动效果(ios11.3 橡皮筋效果)
阅读量:7236 次
发布时间:2019-06-29

本文共 1137 字,大约阅读时间需要 3 分钟。

在升级到 ios11.3 系统后,发现之前阻止页面滚动的代码e.preventDefault代码失效了。于是自己折腾了一番,找到了解决办法,分享给大家。

一、前言

浏览器在移动端有一个默认触摸滚动的效果,让我们感触最深的莫过于微信浏览器里面,下拉时自带橡皮筋的效果。

然而在开发的时候我们经常需要阻止此效果。

在此先直接给一个方案,直接加上下面的代码即可:

document.body.addEventListener('touchmove', function (e) {  e.preventDefault(); //阻止默认的处理方式(阻止下拉滑动的效果)}, {passive: false}); //passive 参数不能省略,用来兼容ios和android

如果不加passive:false,在 ios 上是不能起作用的。

二、解释

微信在 Android 端和 IOS 端使用的不是同样的浏览器内核:

  • Android 版 微信浏览器 :QQ浏览器 X5内核(相当于使用的 Chrome)
  • IOS 版 微信浏览器 :WKWebView(相当于使用的Safari)

所以下面分别使用 Chrome 和 Safari 来分析。

关于浏览器内核问题,有兴趣的可以看看这个:

1. Chrome 默认的事件监听参数:

clipboard.png

useCapture:false 表示事件采用冒泡机制(capture 译为 捕获),浏览器默认就是false;

passive:false 表示我现在主动告诉浏览器该监听器将使用e.preventDefault()来阻止浏览器默认的滚动行为(可以提高运行速度)。

2. Safari 默认的事件监听参数:

在 Safari 中,有一个:

Updated root document touch event listeners to use passive mode improving scrolling performance and reducing crashes
更新了根文档触摸事件侦听器,默认使用
passive:true提高滚动性能并减少崩溃

所以Safari 中默认使用了passive:true,告诉浏览器,此监听事件中,不会阻止默认的页面滚动。这将导致设置的e.preventDefault()代码失效。

所以 Safari 默认是不会阻止滚动的。

3. 结论

我们通过 e.preventDefault(); 阻止默认的下拉滑动的效果,通过添加 passive:false 参数来兼容各个浏览器。即可实现阻止移动页面滚动的功能。

三、关于 passive 参数

关于 passive 在事件监听中的作用,推荐大家看这篇文章:

转载地址:http://dxgfm.baihongyu.com/

你可能感兴趣的文章
[.net 面向对象编程基础] (21) 委托
查看>>
阶乘相关问题
查看>>
ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)
查看>>
Java引用类型变量
查看>>
利用window.navigator.userAgent判断当前是否微信内置浏览器
查看>>
《Programming WPF》翻译 第9章 2.选择一个基类
查看>>
IOS-整体框架类图
查看>>
在Ubuntu下安装*.sh
查看>>
NavigationBar 隐藏底部边线,阴影
查看>>
三种最典型的大数据存储技术路线
查看>>
stl非变易算法(二)
查看>>
java 关键字 transient
查看>>
Ubuntu配置和修改IP地址
查看>>
转载:如何设计一个可扩展的用户登录系统
查看>>
python对redis的常用操作 上 (对列表、字符串、散列结构操作)
查看>>
I.MX6 i2c_data_write_byte ioctl error: I/O error
查看>>
myisam MySQL 锁问题
查看>>
为什么获取的System.Web.HttpContext.Current值为null,HttpContext对象为null时如何获取程序(站点)的根目录...
查看>>
告诉你一个真实的OpenStack:都谁在用,用来干什么?
查看>>
在idea中maven项目jdk编译version总是跳到1.5
查看>>