如何解决移动端滚动穿透问题

简介:
大家都知道,移动端当有fixed遮罩背景和弹出层时,在屏幕上滑动能够滑动背景下面的内容,这就是著名的滚动穿透问题。

下面就介绍一下如何解决此问题:

css的overflow: hidden:

 
1
2
3
4
5
6
.modal-open {
   &, body {
     overflow : hidden ;
     height : 100% ;
   }
}

页面弹出层上将 .modal-open 添加到 html 上,禁用 html 和 body 的滚动条

但是这个方案有两个缺点:

(1).由于 html 和 body的滚动条都被禁用,弹出层后页面的滚动位置会丢失,需要用 js 来还原。

(2).页面的背景还是能够有滚的动的效果。

js的touchmove + preventDefault:

 
1
2
3
modal.addEventListener( 'touchmove' , function (e) {
   e.preventDefault();
}, false );

这样用 js 阻止滚动后看起来效果不错了,但是也有一个缺点:

弹出层里不能有其它需要滚动的内容(如大段文字需要固定高度,显示滚动条也会被阻止)。

所以上面两个方案都有缺点,今天用英文关键字 google 了一下,才发现原来还有更好的方案。

解决方案 position: fixed:

 
1
2
3
4
body.modal-open {
   position : fixed ;
   width : 100% ;
}

如果只是上面的 css,滚动条的位置同样会丢失

所以如果需要保持滚动条的位置需要用 js 保存滚动条位置关闭的时候还原滚动位置

这样上面3个缺点都解决了,至此滚动穿透就完美解决了.



原文发布时间为:2017-2-23

本文作者:admin

本文来自云栖社区合作伙伴“蚂蚁部落”,了解相关信息可以关注蚂蚁部落

原文链接:如何解决移动端滚动穿透问题

相关文章
|
9月前
|
前端开发 JavaScript 大数据
如何解决大数据下滚动页面卡顿问题
如何解决大数据下滚动页面卡顿问题
135 0
|
10月前
|
缓存 并行计算 JavaScript
移动端浏览器性能优化探索
移动端浏览器性能优化探索
|
JavaScript 前端开发 大数据
虚拟滚动是怎么做性能优化的?
虚拟滚动是怎么做性能优化的?
216 0
|
缓存 边缘计算 前端开发
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
系统介绍浏览器缓存机制及前端优化方案
|
JavaScript
fastclick解决移动端click事件延迟300ms和点击穿透
在开发webApp和移动端的时候,常常遇到移动端点击响应慢的问题,因此查找各方资料,整理解决方案加以记录
229 0
|
小程序 前端开发 iOS开发
小程序页面左右滑动如何解决
小程序页面左右滑动如何解决
|
数据采集 JavaScript 前端开发
网站流量日志埋点收集 —原理实现雏形—如何解决 js 跨域问题(伪装图片)|学习笔记
快速学习网站流量日志埋点收集—原理实现雏形—如何解决 js 跨域问题(伪装图片)
199 0
网站流量日志埋点收集 —原理实现雏形—如何解决 js 跨域问题(伪装图片)|学习笔记
|
移动开发 缓存 前端开发
客户端内H5页面的首屏性能优化
客户端内H5页面的首屏性能优化
442 0
客户端内H5页面的首屏性能优化
|
Web App开发 JavaScript 前端开发
从浏览器渲染原理,说一说如何实现高效的动画
从浏览器渲染原理,说一说如何实现高效的动画
216 0
从浏览器渲染原理,说一说如何实现高效的动画
|
消息中间件 JSON 数据格式
开源播放器CicadaPlayer中组件穿透的实现
## 什么是组件穿透 一个应用程序实例完成一件事情,一般需要组合多个组件来完成,比如在一次网络视频播放过程中有个播放器实例需要使用DataSource demxuer decoder render等模块来完成。而每个模块会根据当前的视频创建不同的组件来完成相应的功能,如http的网络流需要启用http DataSource组件,本地文件的播放需要启用file DataSource组件。那么不同的