引子

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. 16,div+css的布局较table布局有什么优点?

    改版的时候更加方便,只要改css文件 页面加载速度更快,结构化清晰,页面显示简洁 表现与结构相分离 易于搜索引擎优化,排名更靠前

  2. 如何在CentOS 7上安装Apache

    使用systemctl管理Apache服务 我们可以像任何其他系统单元一样管理Apache服务. 要停止Apache服务,请运行: sudo systemctl stop httpd 要再次启动,请键 ...

  3. 微信小程序媒体音乐API更新小记,以及音乐外链制作方法

    假期开发微信小程序玩的时候发现音乐播放功能,但是教程中的旧版API已经不能成成功打开 官方文档写的很清楚,旧版接口不再维护,使用新版接口,换API后,又出现了新的问题,虽然没有报错信息,但是播放器闪退 ...

  4. Elasticsearch系列---初识mapping

    概要 本篇简单介绍一下field数据类型mapping的相关知识. mapping是什么? 前面几篇的实战案例,我们向Elasticsearch索引数据时,只是简单地把JSON文本放在请求体里,至于J ...

  5. [CISCN2019 华北赛区 Day1 Web1]Dropbox

    0x01 前言 通常我们在利用反序列化漏洞的时候,只能将序列化后的字符串传入unserialize(),随着代码安全性越来越高,利用难度也越来越大.但在不久前的Black Hat上,安全研究员Sam ...

  6. 9000端口号被上一个ip地址占用,需要reboot才可以恢复正常ip端口问题

    比如查看端口# lsof -i:9000 本机ip已经修改为192.168.0.50,而经过# lsof -i:9000查看到,端口是这样的,192.168.0.88:9000,显示的还是上一个ip的 ...

  7. 小程序云函数调用webservice接口

    https://www.jianshu.com/p/2692e56251ac 小程序最近新出来了云开发能力,主要依赖了node.js(运行在服务器上的js),可以让我们在没有服务器的情况下,使用云开发 ...

  8. 【原】简单shell练习(五)

    1.查询一个文件中某个单词出现的次数 # grep -o 'ts' ./test/txt |wc -l 2.统计当前文件夹下文件的个数 ls -l |grep "^-"|wc -l ...

  9. layui弹窗全屏显示

    var index =layer.open({ id: 'id', type: 2, area: ['100%', '100%'], fix: false, maxmin: true, shadeCl ...

  10. input和button 高度不一致问题

    原因是 input和button的高度计算不一样, input高度不包括border. button高度包括border. 解决方法: 1.box-sizing:border-box: 2.borde ...