微信浏览器下拉黑边解决方案 wScroollFix


Posted in Javascript onJanuary 21, 2020

这篇文章主要介绍了微信浏览器下拉黑边解决方案 wScroollFix,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

开始

由于在开发微信页面的时候下拉黑边的情况很常见,有时候会比较影响体验,因此开发了wScrollFix库,用于隐藏微信下拉的黑边问题

npm地址
github地址

什么是黑边

相信很多在微信上面做网页开发的同学都会发现,当页面被划到顶部或者底部的时候,如果继续滑动,页面会被整个进行下滑,露出上面或者下面的黑底,黑底上面标明了当前访问页面的域名信息,黑边的作用也很明显,由于在微信内浏览器并没有像传统浏览器地址栏那样子的设计,为了在一定程度上面防止钓鱼网站,所以通过下拉显示域名信息,如下图

微信浏览器下拉黑边解决方案 wScroollFix

什么情况下会出现黑边

现象就像上面所说的,如果到了元素的滚动边缘,即元素的scrollTop为0之后继续下滑,或者是到滚动到底部的时候,继续操作就会出现以上的黑边情况。

情况分析

上面我们分析了在微信浏览器中出现黑边的情况,接下去我们聊一聊如何解决,
根据以上的思路,可以分为以下几种情况去解决

对于不需要滚动的页面,我们可以直接将body元素的 touch事件直接preventDefault掉,这样子页面根元素就不会对页面有滚动事件的响应了

第二种情况是页面中有滚动的元素,那么应用于情况1的解决方法就不能用了,用了之后会使得整个页面的滚动失效,因此只能另辟蹊径,回想下我们刚才的黑边的出现情况,在scrollTop为0的时候,继续操作会使得浏览器出现黑边,因此我们可以让滚动的顶部不要到达scrollTop <= 0,还有底部不要到达,这样子上划下划到极限都不会出现黑边了

第三种情况是第二种情况的特殊情况,就是当列表不是静态的,而是动态加载的时候,某些操作,比如在列表加载之前滑动,或者是加载完之后默认的scrollTop为0还继续向上滑动时,可能就会出现黑边

解决方案

对于我封装的wScrollFix库,主要解决的是上面说的情况2和情况3,情况1直接按照上面的做法对touch事件进行绑定就行了
下面我说下解决情况2的方法:代码如下

微信浏览器下拉黑边解决方案 wScroollFix

可以看到这个方法接受一个参数,用于将获取滚动的容器元素,首先将scrollTop设置成1,然后在touchstart,scroll,touchmove事件对页面元素滚动进行检测,确保scrollTop在1和底部高度减1之间,这样子就不会出现黑边

对于情况3,其实就是要在动态列表插入之后能够,能够将scrollTop改成1,这边我用了MutationObserver方案,代码如下:

微信浏览器下拉黑边解决方案 wScroollFix

代码使用了防抖防止插入多次频繁回调,回调的部分的逻辑也比较简单,就是将scrollTop变成1

wScrollFix

封装的wScrollFix使用很简单,可以通过npm i wscrollfix直接进行模块引入,也可以在github直接进行下载引入./dist/wScrollFix.js, 会向全局暴露wScrollFix方法。

使用方法就是把容器元素对象或者选择器作为参数调用wScrollFix,如果有情况3的出现,需要再传一个true,即 wScrollFix(el,true)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
Nov 21 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
JS实现仿京东淘宝竖排二级导航
Dec 08 Javascript
jQuery事件详解
Feb 23 Javascript
详解使用jest对vue项目进行单元测试
Sep 07 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
Sep 27 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 Javascript
vue中如何添加百度统计代码
Dec 19 Vue.js
修改vue源码实现动态路由缓存的方法
Jan 21 #Javascript
微信小程序图片自适应实现解析
Jan 21 #Javascript
微信小程序button标签open-type属性原理解析
Jan 21 #Javascript
Vue实现兄弟组件间的联动效果
Jan 21 #Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 #Javascript
微信小程序如何实现精确的日期时间选择器
Jan 21 #Javascript
微信小程序如何实现点击图片放大功能
Jan 21 #Javascript
You might like
PHP中显示格式化的用户输入
2006/10/09 PHP
初级的用php写的采集程序
2007/03/16 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
javascript动画浅析
2012/08/30 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python 中 Meta Classes详解
2016/02/13 Python
Python中super()函数简介及用法分享
2016/07/11 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
python实现装饰器、描述符
2018/02/28 Python
flask入门之表单的实现
2018/07/18 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python批量修改ssh密码的实现
2019/08/08 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
英国排名第一的最新设计师品牌手表独立零售商:TIC Watches
2016/09/24 全球购物
Vero Moda西班牙官方购物网站:丹麦BESTSELLER旗下知名女装品牌
2018/04/27 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
预备党员思想汇报范文
2014/01/11 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
学员自我鉴定
2014/03/19 职场文书
民事申诉状范本
2015/05/20 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python