您现在的位置是:网站首页> 编程资料编程资料
Html5 滚动穿透的方法html5实现带视差的轮播图片滚动切换效果源码Html5移动端获奖无缝滚动动画实现示例在线html5拼接轨道滚动钢珠游戏解决HTML5中滚动到底部的事件问题
2021-08-31
1143人已围观
简介 这篇文章主要介绍了Html5 滚动穿透的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
问题背景:
网站需要在移动端完成适配,针对移动端H5以及web端采用的都是bluma这种flex布局解决方案
在H5中使用的列表采用的是 react-virtualized 来绘制表格
为了展示表格中单行数据的具体详情,通常的解决方案是采用新页面或者是弹窗来完成。
这里采用的是弹窗的方案,点击单行数据后的数据详情用的是 bluma 的 modal-card。
具体细节和实例可以参考:https://bulma.io/documentation/components/modal/
问题详情:
在点击单行数据后,弹窗显示详情数据,整个 modal-card 设置成 position:fixed;
没有 footer 部分,设置 modal-card 的高度为整个屏幕的高度:100vh
表现:
- 在chrome浏览器中显示,整个modal-card占满整个屏幕
- 在手机端显示也是占满,但是问题是,根据手势移动,会将浏览器的搜索框部分往上顶,此时弹窗下面的数据列表页能够进行滑动,之后弹窗的标题覆盖浏览器原搜索框部分,但这之间有延迟,能清晰看到下面页面的数据
- 在其他手机上会有另外一种显示,如果滑动速度比较快,弹窗出现后立即滑动,就会看到在弹窗的底部就会出现一个小的空白,同样弹窗下面的页面能够滚动,并且有明显延迟和数据滚动显示。
解决方案:
modal-card 自身解决方案:
JS + CSS overflow:hidden
通过JS动态给弹窗下面的页面html添加css类
if ($modalButtons.length > 0) { $modalButtons.forEach(function ($el) { $el.addEventListener('click', function () { var target = $el.dataset.target; openModal(target); }); }); } function openModal(target) { var $target = document.getElementById(target); rootEl.classList.add('is-clipped'); $target.classList.add('is-active'); }
通过 overflow:hidden 来禁止页面的滚动
is-clipped { overflow:hidden!important }当弹窗关闭时,通过JS删除掉页面的 css 类:is-clipped
function closeModals() { rootEl.classList.remove('is-clipped'); $modals.forEach(function ($el) { $el.classList.remove('is-active'); }); }
但是这种方案在应用中测试过后,发现并不能解决问题,上面的问题还是出现
position:fixed 方案
JS + CSS Position:fixed + scrollTop
方案思路:
- 弹窗时,将html的position 设置为 fixed,将弹窗关闭后,将html的postion 属性取消。
- 因为列表页会出现滚动的情况,而点击的行有可能是在滚动发生后,所以需要计算html页面本身的scrollTop 值。
- 因为弹窗时设置position为fixed后,html页面的 scrollTop 值会变成0,会回到页面顶部,所以在关闭弹窗后,需要手动设置html页面的scrollTop 值,让其滚动到html页面原来的位置。
- 对于兼容性,需要设置不同属性的 scrollTop 值
弹窗之前:
const scrollTop = global.document.documentElement.scrollTop || global.pageYOffset || global.document.body.scrollTop; global.document.documentElement.style.position = 'fixed'; this.scrollTop = scrollTop;

关闭弹窗:
closeModalHandler = () => { const { closeOrderHistoryModal } = this.props; global.document.documentElement.style.position = ''; global.pageYOffset = this.scrollTop; global.document.documentElement.scrollTop = this.scrollTop; global.document.body.scrollTop = this.scrollTop; closeOrderHistoryModal(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 前端实现打印图像功能html2canvas生成清晰的图片实现打印的示例代码html2 canvas生成清晰的图片实现打印功能一个不错的html 打印代码支持翻页CSS2 打印属性让打印HTML文档不出问题将XHTML CSS页面转换为打印机页面将XHTML CSS页面转换为打印机页面html 打印相关操作与实现详解
- html5 canvas绘制网络字体的常用方法HTML5 Canvas 破碎重组的视频特效的示例代码前端实现打印图像功能导出HTML5 Canvas图片并上传服务器功能使用Html5中的cavas画一面国旗
- HTML5超炫酷粒子效果的进度条的实现示例html svg生成环形进度条的实现方法HTML5触摸事件实现移动端简易进度条的实现方法HTML5实现自带进度条和滑块滑杆效果网页加载进度条详解(推荐)HTML页面缩小后显示滚动条的示例代码
- HTML5语义化元素你真的用对了吗HTML5新特性之语义化标签HTML5中语义化 b 和 i 标签HTML5 语义化结构化规范化HTML标签语义化(含H5) 详解HTML5常用的语义化标签浅谈HTML的语义化和一些简单优化浅谈语义化的HTML结构到底有什么好处使用语义化标签去写你的HTML 兼容IE6,7,8HTML标签语义化的介绍XHTML标签语义化介绍
- 解决HTML5中滚动到底部的事件问题Html5 滚动穿透的方法html5实现带视差的轮播图片滚动切换效果源码Html5移动端获奖无缝滚动动画实现示例在线html5拼接轨道滚动钢珠游戏
- 手摸手教你用canvas实现给图片添加平铺水印的实现前端水印的简单实现代码示例前端canvas水印快速制作(附完整代码)html5 canvas实现给图片添加平铺水印canvas 下载二维码和图片加水印的方法前端使用canvas生成盲水印的加密解密的实现
- html5 canvas实现给图片添加平铺水印前端水印的简单实现代码示例前端canvas水印快速制作(附完整代码)手摸手教你用canvas实现给图片添加平铺水印的实现canvas 下载二维码和图片加水印的方法前端使用canvas生成盲水印的加密解密的实现
- 导出HTML5 Canvas图片并上传服务器功能HTML5 Canvas 破碎重组的视频特效的示例代码前端实现打印图像功能html5 canvas绘制网络字体的常用方法使用Html5中的cavas画一面国旗
- HTML5自定义属性的问题分析详解HTML5 data-* 自定义属性HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)全面解析HTML5中的标准属性与自定义属性html5的自定义data-*属性与jquery的data()方法的使用HTML5的自定义属性data-*详细介绍和JS操作实例HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
- HTML5实现视频弹幕功能html5视频媒体标签video的使用方法及完整参数说明详解Html5实现首页动态视频背景的示例代码HTML5 视频播放(video),JavaScript控制视频的实例代码HTML5视频播放插件 video.js介绍 HTML5自定义视频播放器源码
