微信浏览器下拉黑边解决方案 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实现手把手教你月入万刀(转贴)
Nov 07 Javascript
通过身份证号得到出生日期和性别的js代码
Nov 23 Javascript
Javascript笔记一 js以及json基础使用说明
May 22 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
JS中将多个逗号替换为一个逗号的实现代码
Jun 23 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
vue项目打包部署到服务器的方法示例
Aug 27 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
Sep 02 Javascript
让Vue响应Map或Set的变化操作
Nov 11 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
Nov 16 Javascript
修改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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
jquery实现div阴影效果示例代码
2013/09/16 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
jquery实现的简单二级菜单效果代码
2015/09/22 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
基于JavaScript实现百度搜索框效果
2020/06/28 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
使用grappelli为django admin后台添加模板
2014/11/18 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
python 获取字符串MD5值方法
2018/05/29 Python
python的concat等多种用法详解
2018/11/28 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
python实现五子棋小程序
2019/06/18 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
tensorflow 变长序列存储实例
2020/01/20 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
如何唤起类中的一个方法
2013/11/29 面试题
UNIX文件系统分类
2014/11/11 面试题
2014年班长个人工作总结
2014/11/14 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python