解决微信小程序中的滚动穿透问题


Posted in Javascript onSeptember 16, 2019

Mask-Scroll

> 原码地址 *

蒙层防穿透问题

> 蒙层穿透就是,当你用fixed 布局让蒙层显示的时候, 手指滑动屏幕会出现底部内容也滑动的现象. 如图:

解决微信小程序中的滚动穿透问题

当蒙层出现的时候,你滚动屏幕,底部内容也一起跟着滚动。 这就是蒙层穿透, 也可以叫 '滚动穿透'. 当然出现这种情况, 用户体验当然是不好的了。 所以作为一个有点追求的工程师当然是不允许这种情况的发生了(手动狗头...)

解决微信小程序中的滚动穿透问题

## 解决方案

这种要分情况,

  • 当蒙层没有滚动条的时候。
  • 当蒙层出现滚动条的时候

1. 当弹窗没有滚动条的时候。

直接监听 catch:touchmove 方法, 然后直接返回就可以了。

代码可以去看fixed 目录下的文件

主要代码:

*// wxml*
 <view 
​ class="fixed-mask"
​ bind:tap="hideMsak"
​ wx:if="{{isShowMask}}"
​ catch:touchmove="stopMove">
​ <view class="mask-container" >
​  <view class="mask__item">
​  I am {{dogName}}
​  </view>
​ </view>
 </view>
 *// css*
 .fixed-mask {
 position: fixed;
 left: 0;
 top: 0;
 height: 100vh;
 width: 100vw;
 background: #333;
 opacity: 0.8;
 z-index: 2;
}
.mask-container {
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
}
.mask__item {
 margin: 0 auto;
 background-color: #ff0015;
 text-align: center;
 width: 500rpx;
 height: 500rpx;
 line-height: 500rpx;
 margin-bottom: 20rpx;
}
*// js*
 stopMove () {
​ return;
 }

效果如下:

解决微信小程序中的滚动穿透问题

上面是当弹窗没有滚动条的情况, 当弹窗出现滚动条的时候。

哦豁, 完蛋, 弹窗不能滚动了。

2. 当弹窗有滚动条的时候

方法一:

动态给底部滚动的元素 添加固定定位。也就是当出现弹窗的时候添加一个 class 样式类

效果如图:

解决微信小程序中的滚动穿透问题

代码在scroll1 文件夹。

*// css* 

.bottom-fixed {

 position: fixed;

 left: 0;

 top: 0;

 overflow: hidden;

}

*// wxml*

 <view class="dog-container {{isShowMask ? 'bottom-fixed' : ''}}"></view>

大家可以看到 因为底部元素给固定到页面顶部了, 而不是你点击弹窗时出现的位置。目前自己还没有找到解决方法。 如果大佬有会的, 不吝赐教。。

*方法二:*

> scroll-view 设置高度 以及纵向滚动方向。

不过scroll-view 会有一些bug

详情查看

代码在scrooll 文件夹

效果如下图:

解决微信小程序中的滚动穿透问题

总结

以上所述是小编给大家介绍的解决微信小程序中的滚动穿透问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript 学习笔记(七)字符串的连接
Dec 31 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
Jun 09 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
jquery实现左右无缝轮播图
Jul 31 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
May 10 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
微信小程序 删除项目工程实现步骤
Nov 10 Javascript
javascript中递归的两种写法
Jan 17 Javascript
Vue 全家桶实现移动端酷狗音乐功能
Nov 16 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
js实现弹窗猜数字游戏
Nov 26 Javascript
微信小程序左滑删除实现代码实例
Sep 16 #Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 #Javascript
layui 实现表单和文件上传一起传到后台的例子
Sep 16 #Javascript
Vue 自定义指令实现一键 Copy功能
Sep 16 #Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
Sep 16 #Javascript
layui使用templet格式化表格数据的方法
Sep 16 #Javascript
layui监听单元格编辑前后交互的例子
Sep 16 #Javascript
You might like
用PHP读取超大文件的实例代码
2012/04/01 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
JS 建立对象的方法
2007/04/21 Javascript
input的focus方法使用
2010/03/13 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
Python使用sorted排序的方法小结
2017/07/28 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python print不能立即打印的解决方式
2020/02/19 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
工作收入证明模板
2014/10/10 职场文书
农村老人去世追悼词
2015/06/23 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
golang实现浏览器导出excel文件功能
2022/03/25 Golang
MySQL 条件查询的常用操作
2022/04/28 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL