引子

h5 页面有弹窗浮层时,浮层之下若产生了滚动,滑动浮层时会让其产生滚动。这是示例页面,移动端访问如下:

原因

找到的信息里面有两种说法:

  • 使用了 -webkit-overflow-scrolling: touch ,另外这个不是标准属性。
  • 浮层也是页面的一个元素,浮层的展示正常,页面中的其它元素按照本来的方式展示运作。也就是说这是一个正常的现象,只不过是我们不想要这种效果。

针对第一种说法,进行测试验证,这是示例页面,移动端访问如下:

发现:跟 -webkit-overflow-scrolling: touch 无关。

处理方法

在网上找到的资料,主要有两种思路:

  1. 阻止 touch 相关的事件。
  2. 弹出浮层时,禁止元素滚动,浮层消失时,恢复滚动。

第一种思路在很多资料中提到有明显的缺陷:

  • 弹出层的滚动会有问题。
  • 会锁死滚动区域。
  • 弹出层的事件处理可能会产生影响。

较多采用第二种思路,但也有对应的问题:

  • 元素滚动的状态切换,会丢失滚动的位置。

针对滚动位置丢失问题,采用动态记录滚动位置的方式可以解决。

示例代码

// 以下方法使用的前提是产生滚动元素为 body
function fixedEle() {
var scrollEle = document.body;
// 有可能出现浮层内切换的情况,已经设置了就不用重复设置了。
if (scrollEle.style.position !== 'fixed') {
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
scrollEle.style.cssText += 'position:fixed;top:-'+scrollTop+'px;';
}
} function recoverEle() {
var scrollEle = document.body;
var top = scrollEle.style.top;
scrollEle.style.position = '';
scrollEle.style.top = '';
document.body.scrollTop = document.documentElement.scrollTop = -parseInt(top);
}

这是示例页面,移动端访问如下:

参考资料

h5 穿透滚动的更多相关文章

  1. H5中滚动到底部的事件

    问题:在H5中,我们有这样的需求:例如有列表的时候,滚动到底部时,需要加载更多. 解决方案:可以采用window的滚动事件进行处理 分析:如果滚动是针对整个屏幕而言的(不针对于某个界面小块),那么这个 ...

  2. 【H5】滚动事件(jq)

    $(function(){ console.log($('html,body').scrollTop());  //记录滚动高度(滚动前) }) $('html,body').scroll(funct ...

  3. vue使用H5实现滚动到页面底部时加载数据

    使用原生vue实现瀑布流,发现无法实现小程序那种滚动到地步触发加载效果,只能自己研究了 实现效果: 实现代码: 首先添加监听滚动事件 mounted() { window.addEventListen ...

  4. H5横向滚动提示

    <marquee>啦啦啦,Hello World</marquee>

  5. H5中滚动卡顿的问题

    加入-webkit-overflow-scrolling: touch;即可

  6. h5页面列表滚动加载数据

    h5列表滚动加载数据很常见,以下分享下今天做的案例: 前言 这个效果实现需要知道三个参数 1. scrollTop -- 滚动条距离顶部的高度 2. scrollHeight -- 当前页面的总高度( ...

  7. section标签实现文字滚动

    h5新增样式 section标签 使用demo //h5新增属性 h5新增滚动的标签 <marquee> <div style="padding-left: 20px;ma ...

  8. HTML 事件

    1.HTML 全局事件属性 HTML4 的新特性之一就是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript,在 HTML5 中还增加了一些新 ...

  9. Vue.js有赞商城(思路以及总结整理)

    以下是本次项目的代码链接和预览链接:    代码链接:https://github.com/Leonardo-zyh/Vue-youzanStore    预览链接:https://leonardo- ...

随机推荐

  1. [C/C++] 静态变量赋值问题 undefined reference to

    刚才在写代码的时候 用到了一个静态变量 然后在别人地方直接使用的时候 也就是 NetWork::Flag = 0; 像是这样使用的时候一直提示 undefined reference to 各种检查之 ...

  2. ztree-可拖拽可编辑的树

    <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - addNodes / editName / rem ...

  3. java 实现一段文字中,出现次数最多的字

    代码如下: public static void main(String[] args) { String str = "大批量,之前都没怎么注意过,这个问题确实不会,网上参考了下别人的,大 ...

  4. yii2.0 ajax

    2.0用的参数是_csrf token = "<?php echo \Yii::$app->request->getCsrfToken()?>", $.aj ...

  5. 通过POI实现上传EXCEL的批量读取数据写入数据库

    最近公司新增功能要求导入excel,并读取其中数据批量写入数据库.于是就开始了这个事情,之前的文章,记录了上传文件,本篇记录如何通过POI读取excel数据并封装为对象上传. 上代码: 1.首先这是一 ...

  6. 【Python pymysql】

    " 目录 关于sql注入 用户存在,绕过密码 用户不存在,绕过用户与密码 解决sql注入问题 commit() 增 改 删 查询数据库 fetchone() fetchall() fetch ...

  7. Net Core解决ZipFile解压中文出现乱码

    一.在main方法中添加 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 二.解压添加 //sourceArchiveFi ...

  8. 用纯css实现双边框效果

    1. box-shadow:0 0 0 1px #feaa9e,0 0 0 5px #fd696f 2. border:1px solid #feaa9e; outline:5px solid #fd ...

  9. ZOJ1008 Gnome Tetravex

    DFS+剪枝~ #include<bits/stdc++.h> using namespace std; ][]; int N; int cnt; ]; ]; unordered_map& ...

  10. ESLint规则整理与实际应用

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lhb_11/article/detail ...