Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【总结】1823- 移动端滚动穿透与滚动溢出解决方案

【总结】1823- 移动端滚动穿透与滚动溢出解决方案

作者头像
pingan8787
发布于 2023-10-04 13:27:08
发布于 2023-10-04 13:27:08
75100
代码可运行
举报
文章被收录于专栏:前端自习课前端自习课
运行总次数:0
代码可运行
滚动穿透

问题描述

在移动端 WEB 开发的时候(小程序也雷同),如上录屏所示,如果页面超过一屏高度出现滚动条时,在 fixed 定位的弹窗遮罩层上进行滑动,它下面的内容也会跟着一起滚动,看起来好像事件穿透到下面的DOM元素上一样,我们姑且称之为滚动穿透。

问题原因

能够猜想是文档(document)的滚动事件被触发了,如果能禁用滚动事件就好办了。

案例伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="btn">点击出现弹窗</div>

<div class="popup">
  <div class="popup-mask"></div>
  <div class="popup-body popup-bottom">
    <div class="header">我是标题</div>
    <div class="content">
      <div>0</div>        
      <div>1</div>
      <div>...</div>
    </div>
  </div>
</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.popup-mask {
  background-color: rgba(0, 0, 0, 0.5);
  position: fixed;
  z-index: 998;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.popup-body {
  padding: 0 50px 40px;
  background-color: #fff;
  position: fixed;
  z-index: 999;
}

✅ 解决方案A (touch-action)

默认情况下,平移(滚动)和缩放手势由浏览器专门处理,但是可以通过 CSS 特性 touch-action 来改变触摸手势的行为。摘取几个 touch-action 的值如下。

描述

auto

启用浏览器处理所有平移和缩放手势。

none

禁用浏览器处理所有平移和缩放手势。

manipulation

启用平移和缩放手势,但禁用其他非标准手势,例如双击缩放。

pinch-zoom

启用页面的多指平移和缩放。

于是在 popup 元素上设置该属性,禁用元素(及其不可滚动的后代)上的所有手势就可以解决该问题了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.popup {
  touch-action: none;
}

Note: [无障碍设计] 阻止页面缩放可能会影响视力不佳的人阅读和理解页面内容,不过小程序本身好像就不可以缩放!

✅ 解决方案B (event.preventDefault)

来自 W3C 的一个标准。

大意是说,在 touchstart 和 touchmove 事件中调用 preventDefault 方法可以阻止任何关联事件的默认行为,包括鼠标事件和滚动。

因此我们可以这样处理。 Step 1、监听弹窗最外层元素(popup)的 touchmove 事件并阻止默认行为来禁用所有滚动(包括弹窗内部的滚动元素)。 Step 2、释放弹窗内的滚动元素,允许其滚动:同样监听 touchmove 事件,但是阻止该滚动元素的冒泡行为(stopPropagation),使得在滚动的时候最外层元素(popup)无法接收到 touchmove 事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const popup = document.querySelector('.popup')
const scrollBox = document.querySelector('.content')

popup.addEventListener('touchmove', (e) => {
  // Step 1: 阻止默认事件
  e.preventDefault()
})

scrollBox.addEventListener('touchmove', (e) => {
  // Step 2: 阻止冒泡
  e.stopPropagation()
})

滚动溢出

问题描述

如上录屏所示,弹窗内也含有滚动元素,在滚动元素滚到底部或顶部时,再往下或往上滚动,也会触发页面的滚动,这种现象称之为滚动链(scroll chaining), 但是感觉滚动溢出(overscroll)这个名字更言辞达意。

❌ 解决方案A (overscroll-behavior)

overscroll-behavior 是 CSS 的一个特性,允许控制浏览器滚动到边界的表现,它有如下几个值。

描述

auto

默认效果,元素的滚动可以传播到祖先元素。

contain

阻止滚动链,滚动不会传播到祖先元素,但是会显示节点自身的局部效果。例如 Android 上过度滚动的发光效果或 iOS 上的橡皮筋效果。

none

与 contain 相同,但是会阻止自身的过度效果。

所以可以这样解决问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.content {
  overscroll-behavior: none;
}

简洁干净高性能,不过 Safari 全系不支持,兼容性如下,有没有感觉 Safari 就是现代版的 IE(偶然听路人说的)!

✅ 解决方案B (event.preventDefault)

借用 event.preventDefault 的能力,当组件滚动到底部或顶部时,通过调用 event.preventDefault 阻止所有滚动,从而页面滚动也不会触发了,而在滚动之间则不做处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let initialPageY = 0

scrollBox.addEventListener('touchstart', (e) => {
    initialPageY = e.changedTouches[0].pageY
})

scrollBox.addEventListener('touchmove', (e) => {
    const deltaY = e.changedTouches[0].pageY - initialPageY
    
    // 禁止向上滚动溢出
    if (e.cancelable && deltaY > 0 && scrollBox.scrollTop <= 0) {
        e.preventDefault()
    }

    // 禁止向下滚动溢出
    if (
        e.cancelable &&
        deltaY < 0 && 
        scrollBox.scrollTop + scrollBox.clientHeight >= scrollBox.scrollHeight
    ) {
        e.preventDefault()
    }
})

解决方案完整 Demo

https://github.com/Barrior/cases/blob/main/overscroll.html

作者:Barrior https://segmentfault.com/a/1190000040675446

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-03 09:33,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端自习课 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯TAPD&信通院 金融研发管理交流会:AI赋能金融研发管理的智能跃迁
2025年3月14日,由腾讯与信通院联合主办的“AI时代下的金融研发管理交流会”在北京腾讯总部大厦盛大举行。本次会议以“深度推理重构效能:金融研发管理的智能跃迁——DeepSeek技术驱动的研发范式革新与行业实践”为主题,聚焦金融行业研发管理的前沿趋势与实战成果,吸引了众多行业专家、企业代表及金融科技同仁齐聚一堂,共同探讨AI技术如何为金融研发管理注入新动能。
TAPD敏捷研发
2025/03/19
1580
腾讯TAPD&信通院 金融研发管理交流会:AI赋能金融研发管理的智能跃迁
创业公司项目管理中必踩的那些坑 | TAPD经验谈
 导读  “组织结构混乱”、“团队协作不透明”、“项目交付不及时”、“人员流动性大”…… 创业公司成长迅速,业务蓬勃发展,团队不断扩张。这本是令人高兴的事情,却会给团队和项目管理带来不小的挑战。无论你是什么岗位,肯定都有属于你的小烦恼。 本期「TAPD经验谈」pick了创业公司中的敏捷研发管理老司机,有着十年项目管理经验的老司机,某金融科技公司原项目总监 莫敏 ,来给大家介绍他们团队实战过程中的填坑经验。 我叫莫敏,之前是某金融科技公司的项目总监,也是PMO负责人。 从BAT某大厂刚到这家公司时,我曾信心
TAPD敏捷研发
2018/09/19
4.7K0
创业公司项目管理中必踩的那些坑 | TAPD经验谈
得物卓越研发效能之路:原则、方法与实践全景揭秘
在当今互联网技术日新月异和企业降本增效的时代,研发效能已经成为衡量一个团队或组织竞争力的关键指标。提升研发效能不仅能加速产品上市时间,还能提高产品质量,增强客户满意度,持续提升企业竞争力。本文旨在介绍得物如何从原则、方法到成功实践,系统性提升研发效能的过程和经验。期待与行业专家深入探讨和交流,共同推动研发效能实践的新突破。
得物技术
2024/07/02
5250
得物卓越研发效能之路:原则、方法与实践全景揭秘
首度揭秘:腾讯敏捷研发和极速交付破局之道
 导读  腾讯到底是怎么进行敏捷研发和极速产品交付的呢? 腾讯研发管理部高级产品经理、敏捷教练张贺,受邀在DevOpsDays深圳站中进行了相关分享。 他从“道、法、术、器”四个方面揭秘了腾讯当年面对研发方面挑战时的破局之道,并结合实践介绍了腾讯的三种研发模型及典型案例。 快来一起看看吧~ 大家好! 首先做一下自我介绍,我叫张贺,来自腾讯研发管理部,目前主要负责腾讯敏捷研发体系和敏捷研发平台TAPD的建设工作,同时我个人也是一名敏捷教练,指导了腾讯内部很多业务团队的敏捷实施,也帮助了许多腾讯合作企业完成了
TAPD敏捷研发
2018/12/18
1.7K0
首度揭秘:腾讯敏捷研发和极速交付破局之道
服务千万用户的丁香园,疫情期间如何实践敏捷研发
丁香园是中国领先的医疗领域连接者,旗下的丁香医生、丁香人才等产品在医院、医生和患者之间树立了良好的口碑。自创立至今,丁香园逐渐成长为一个用户突破千万的大型“互联网+医疗”企业。在新冠疫情期间,丁香园依托敏捷协作实现了产品和服务的快速迭代,为抗疫前线提供了持续的助力。 在发展壮大的过程中,丁香园也曾面临业务线的不断发展、研发规模扩大带来的压力。这些难题让丁香园更加坚定地迈向敏捷。在TAPD的支撑下,丁香园不仅在研发过程中实现了敏捷的转型,同时在更多领域开启了敏捷的探索。让我们看一看丁香园的敏捷之路。
TAPD敏捷研发
2020/08/21
6940
TAPD思享汇|高科制造企业如何软硬协同、敏捷提效?
软硬件一体的高科制造类项目研发管理有多难?如何通过敏捷管理提升研发质量?如何构建产品、项目、团队三位一体的研发管理体系? 腾讯 TAPD 推出 「TAPD 思享汇」线上直播系列课程,一期直播将聚焦 T
TAPD敏捷研发
2022/12/14
3280
TAPD思享汇|高科制造企业如何软硬协同、敏捷提效?
TAPD思享汇|高科制造企业如何软硬协同、敏捷提效?
软硬件一体的高科制造类项目研发管理有多难?如何通过敏捷管理提升研发质量?如何构建产品、项目、团队三位一体的研发管理体系? 腾讯 TAPD 推出 「TAPD 思享汇」线上直播系列课程,一期直播将聚焦
腾讯云开发者
2022/12/20
3090
TAPD思享汇|高科制造企业如何软硬协同、敏捷提效?
微盟CTO:公司快速成长时,研发管理怎样才能跟得上?
成立于2013年的微盟,从最初的微信第三方开发商,现已发展成为中国领军的智能商业服务提供商。2019年初,微盟集团成功港股上市,正式成为“新经济SaaS第一股”。 在公司的高速成长期,微盟集团的CTO黄骏伟随时准备着处理研发团队遇到的难题。对一家新公司来说,不停寻找正新的增长点是一件生死攸关的事情;而他要做的,就是推动研发团队跟上公司高速成长的脚步。 “不够完美,还可以再好一点”,这是黄骏伟团队中一句广为流传的话,也代表了他对现阶段研发管理的一些看法。以下是微盟CTO黄骏伟先生在TAPD思享汇线下沙龙中关
TAPD敏捷研发
2019/07/31
3.2K0
微盟CTO:公司快速成长时,研发管理怎样才能跟得上?
提升研发质量,元年科技是怎么做的?
元年科技,深耕中国企业服务20年,服务上千家大型企业集团,是国内管理会计、财务管理等专业领域的领导者,对金融、地产、零售快消、装备制造等行业有深刻的洞察和丰富的经验。 本文整理自元年科技研发流程总监周晓芳在TAPD思享汇上的分享,为大家分享元年科技如何通过TAPD标准化、规范化研发流程,如何通过TAPD量化质量管理,高效交付业务价值。 Part 1 元年科技敏捷项目管理背景和管理思路 随着企业数字化转型逐渐深化发展,元年科技的客户规模越来越大,对团队持续交付提出了更高的要求,元年科技开始在研发流程上面临以下
TAPD敏捷研发
2023/04/07
4820
提升研发质量,元年科技是怎么做的?
Jira停售,这些企业的研发管理交出了完美的“中国答案”
Atlassian终止了对Jira Server版本的支持,这一决定对全球尤其是中国企业产生了深远影响。Jira作为一款全球领先的研发管理工具,其Server版本的停售意味着企业必须选择迁移到Data Center或Cloud版本,或者寻找替代方案。这一变化不仅带来了高昂的成本压力,还引发了数据安全、插件支持等多方面的挑战。
TAPD敏捷研发
2025/03/27
780
Jira停售,这些企业的研发管理交出了完美的“中国答案”
腾讯的敏捷研发之战
“我们今天可以想一些与众不同的点子,然后我们可以很快就看到效果,因为我们可以很快把它上线了,然后可以去验证,如果不对就下线,如果还有改进余地,下个星期再去改它。这是一个能够持续实现你的想法的过程”。 2016年,腾讯微信事业群一年一度的管理团队领导力大会上,“敏捷开发”的重要性被专门提起。 此时,距离他们接手QQ邮箱已有十年。 这一年,也正是TAPD诞生的第十年。 01 在团队眼中,QQ邮箱的胜利应归功于敏捷。 回忆起2005年接手QQ邮箱的时候,QQ邮箱在中国的排名很靠后,也没有人重视,“可以说是个
腾讯大讲堂
2020/09/15
1.5K0
互联网研发效能方法工具落地金融行业的实践方法
近日,腾讯DevOps产品专家王一男在GOPS大会上发表了题为《互联网研发效能方法工具落地金融行业的实践方法》的主题演讲。文章整理自王一男在GOPS大会上的演讲。 大家好,我是腾讯TEG的王一男。过去一年,我的主要工作是把互联网企业内部的研发效能工具产品化对外toB,给其它行业尤其是金融行业客户提供研发效能提升的解决方案。在这个过程中我发现腾讯等互联网公司的效能工具和方法落地金融行业时会遇到一些"水土不服"的现象。今天的分享是过去一年工作的经验总结,希望能够推动敏捷、DevOps跨行业赋能过程中
TAPD敏捷研发
2021/06/18
1.6K0
从独角兽到上市:我们与TAPD的故事
盘点这些已经成功上市的独角兽企业,会发现他们都非常关注研发投入,重视自身研发效能的提升。想要在激烈的市场竞争中抢占先机,快速响应、高效交付至关重要。
TAPD敏捷研发
2019/03/20
6220
从独角兽到上市:我们与TAPD的故事
未来企业的数智之路:从研发敏捷到全面敏捷 | 附下载
2023系统稳定性与精益软件工程大会于12月27日在京举办,腾讯研究院联合中国信息通信研究院及腾讯TAPD共同发布了《2023年企业数智化敏捷协作数据报告》,旨在为企业提升数智化协作水平、实现高质量发展提供参考。以下是对报告的解读,完整报告请见文末下载。
小腾资讯君
2024/01/03
2960
未来企业的数智之路:从研发敏捷到全面敏捷 | 附下载
高科制造类项目研发如何软硬协同、敏捷提效?| Q推荐
当前社会正处于数字化变革的重要阶段,企业正面临着跨界竞争等挑战和不确定性因素,如何更快、准、稳地进行数字化转型成为全行业关注的焦点。敏捷协作凭借着其先天优势,能够帮助企业集中内部资源,快速迭代产品,更加灵活地应对外部变化,满足客户需求,成为了企业破局数字化时代的关键。 TAPD 作为国内最早一批上线的敏捷研发协作平台,积累了腾讯十余年敏捷研发精髓,为金融、游戏、社交文娱、电商零售、高科制造、企业服务等诸多行业客户量身打造了产品研发全生命周期解决方案,并帮助客户解决项目管理问题,提升研发效能。 本期 「TAP
深度学习与Python
2023/03/29
3550
高科制造类项目研发如何软硬协同、敏捷提效?| Q推荐
协同新机遇:让研发敏捷起来
在紧凑的产品研发迭代周期中,往往涉及需求规划、项目计划和进度跟踪、开发构建、测试及发布部署等一系列操作。这个过程在传统的研发组织中,各研发职能团队如同竖井,形成了业务流程不互通、信息不透明、协作效率低的的窘境。于是,敏捷成为驱动研发组织高效协作、打破研发数据孤岛的重要能力。
人称T客
2020/09/10
1.4K0
协同新机遇:让研发敏捷起来
保险公司如何探索高质量价值交付?研发效能负责人这样说
作为全国性专业寿险公司,某知名保险公司主要经营财产保险业务的全国性保险公司和人寿保险、健康保险和意外伤害保险等人身险业务。
TAPD敏捷研发
2023/07/05
2330
保险公司如何探索高质量价值交付?研发效能负责人这样说
微保在敏捷研发管理中的实践
创业团队在组建和扩张时如何高效协作,是组织要解决的大难题。明确目标、确保成员清晰知道如何配合、过程中管理好干系人预期、关键环节做好变更管理和风险把控、采用增量迭代的敏捷项目管理机制、确保“做对的事情”和“把事情做对”,是微保业务快速、稳步发展的关键。 01 背景 1、互联网保险的机遇与挑战 1) 机遇 2018年中国保险行业保费全球第二,保险深度(保费/GDP)4.57%,排名全球36位。保险密度(人均保费),排名全球46位。中国保民意识逐渐苏醒,保险市场增速20%+。互联网保民累计2.2亿用户,保民年龄
TAPD敏捷研发
2019/12/03
1.1K0
微保在敏捷研发管理中的实践
腾讯专有云研发过程首次披露
2018年11月3日,DevOps国际峰会于深圳圣淘沙酒店举行,上午的腾讯研发效能专场,开场前已座无虚席。由腾讯工蜂Git、腾讯TAPD、腾讯专有云三位产品/技术负责人带来各自产品在DevOps实践上的分享,这也是腾讯专有云首次披露研发过程。
腾讯技术工程官方号
2018/11/08
9.5K0
财富管理需求潮涌,看某头部券商如何掌握数字化“密码”
作为财富管理行业的先行者,某头部券商致力于帮助客户制定服务人生目标的财富规划,并为客户提供专业的投资解决方案。
TAPD敏捷研发
2023/06/09
3020
财富管理需求潮涌,看某头部券商如何掌握数字化“密码”
推荐阅读
相关推荐
腾讯TAPD&信通院 金融研发管理交流会:AI赋能金融研发管理的智能跃迁
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验