博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
移动端页面滚动穿透问题解决方案
阅读量:4921 次
发布时间:2019-06-11

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

问题描述

最近在做移动项目时遇到一个页面滚动穿透问题,具体场景是这样的,在一个可滚动的列表页中打开弹窗,底部的页面理论上是不可滚动的,但是当滑动弹窗时,底部页面会跟随滚动,这就是所谓的页面滚动穿透的问题。这个是比较常见的问题,基本都会遇到,Google一下出解决方案也是挺多的。以下根据不同的适用场景总结一些解决方案:

方案一:overflow:hidden

在列表容器的父元素上设置样式overflow:hidden来禁用滚动

.alpha {     height: 100%;     overflow: hidden;    }    .alpha body {     height: 100%;     overflow: hidden;    }

当弹出蒙层的时候,可以添加底部页面HTML标签的class,取消蒙层时则删除class

$('html').addClass('alpha');    $('html').removeClass('alpha');

缺点:

当弹出蒙层时,禁用了html和body的滚动条,滚动列表的滚动位置会丢失,会重置到没有滚动的状态,需要js进行还原。

手机扫码查看效果:

1、未滚动时弹出蒙层,底部列表会被禁用滚动
2、滚动后再弹出蒙层,滚动位置会丢失,重置到无滚动的位置

686913-20160828160832589-448322445.png

方案二:阻止touchmove默认事件

通过阻止弹窗的touchmove默认事件禁用滚动实现

代码实现:

var modal = document.getElementById('modal'); // 弹窗dom对象    modal.addEventListener('touchmove', function(e) {      e.preventDefault();    }, false);

缺点

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

手机扫码查看效果:

686913-20160828164238202-2060984606.png

方案三:position: fixed

设置列表容器元素为positon:fixed

代码实现:

.alpha.body{        position:fixed;        width:100%;    }

缺点:

这种方法同样有以上两种方法的缺点,滚动列表的滚动位置会丢失,会重置到没有滚动的状态,通过js获取滚动条位置,调整位置即可。

打开弹窗时则在body元素上添加class

手机扫码查看效果:
686913-20160828171530122-1737707476.png

更多阅读

转载于:https://www.cnblogs.com/GeniusLyzh/p/5808446.html

你可能感兴趣的文章
python之asyncio三种应用方法
查看>>
Laravel 的文件存储 - Storage
查看>>
转:[Server] 在 Windows 上安裝 PHP 5.3 開發環境
查看>>
【IE6的疯狂之二】IE6中PNG Alpha透明(全集)
查看>>
第一个Shell脚本
查看>>
C++ 小笔记
查看>>
Mysql 语句优化
查看>>
例子:进度条
查看>>
包含单引号的sql
查看>>
HTML 基础 2
查看>>
Java 最常见 200+ 面试题全解析:面试必备(转载)
查看>>
LinkedList
查看>>
Spring框架下PropertyPlaceholderConfigurer类配置roperties文件
查看>>
SQL查询优化
查看>>
使用子查询
查看>>
SD卡调试关键点
查看>>
Hadoop HBase Phoenix 版本
查看>>
深入Java集合学习系列:ConcurrentHashSet简单实现
查看>>
[原创]独立模式安装Hive
查看>>
声音推荐【Anaesthesia】Maximilian Hecker强烈推荐
查看>>