html5网页自动滚动,Html5 滚动穿透的方法

问题背景:

网站需要在移动端完成适配,针对移动端H5以及web端采用的都是bluma这种flex布局解决方案

在H5中使用的列表采用的是 react-virtualized 来绘制表格

为了展示表格中单行数据的具体详情,通常的解决方案是采用新页面或者是弹窗来完成。

这里采用的是弹窗的方案,点击单行数据后的数据详情用的是 bluma 的 modal-card。

问题详情:

在点击单行数据后,弹窗显示详情数据,整个 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');

}

0f5958c4cd51a56bf2d55729c80eb598.png

通过 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');

});

}

5753844792e4bde2a48423420595269d.png

但是这种方案在应用中测试过后,发现并不能解决问题,上面的问题还是出现

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;

49782aad3b27498a31e1d90936d4fbec.png

关闭弹窗:

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();

}

1dbbed16315759a07eed0365a831634c.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac如何看html5视频播放器,苹果Mac系统看HTML5视频教程介绍

上一回,小编教了大家一个Mac用 HTML5 免费看优酷和土豆等付费视频,这回小编又找到一个用HTML5看视频的好方法,很多很好用的资源,你可以在Mac上看各种地方台的直播以及乐视、凤凰卫视、TVB、东森等港澳台电视节目哦!大部…

html中设置负边距的意义,css负边距之详解

自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史。正因为此,从那以后CSS布局成为了优雅代码的代名词。对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功。这就像是在线纹身-每个人都会做&#x…

warning: expression result unuesd 可能原因是函数忘了加括号,

转载于:https://www.cnblogs.com/chulin/p/9082833.html

vue基础18(vue-cli脚手架项目中组件的使用)

vue-cli脚手架项目中组件的使用 在webpack-simple模板中,包括webpck模板。一个.vue文件就是一个组件。 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包。同时webpack还能将我们的html(template&#xf…

js和layerjs配合实现的拖拽表格列

前几天想着实现表格列的拖拽 写了个例子 一直不完美 经过修改感觉还算完美了 拖拽过程不会复制文字并且还能实现layerjs本身自带的表格排序功能。 1、首先引入layer.css jquery layui.all.js 2、布局页面 <div class"divT"> <table class"l…

计算机应用中的CAI,????按计算机应用的分类,CAI应属于()应用。

按计常见的企业法律组织形式有()&#xff1f;算机属于recoil固有的、应用I应应用本来的按计cant help but算机属于Destruction of the original forest leads to the ___ of many plants.应用I应应用flocks of的同义词按计Many birds ___ southeast in winter.支持、算机属于供…

(tmp 8) 0xff;

以下是阅读他人文章后&#xff0c;个人对计算 (tmp >> 8) & 0xff; 的理解&#xff1a; 将tmp转为二进制数 6322040->11000000111011101111000,向右移16位&#xff08;清掉该16位&#xff09;&#xff0c;且左边用0补足16位 00000000000000001100000&#xff0c;将…

请对比html与css的异同,css3与css2的区别是什么?

CSS为HTML标记语言提供了一种样式描述&#xff0c;定义了其中元素的显示方式。CSS在Web设计领域是一个突破。利用它可以实现修改一个小的样式更新与之相关的所有页面元素。CSS2.0是一套全新的样式表结构&#xff0c;是由W3C推行的&#xff0c;同以往的CSS1.0或CSS1.2完全不一样…

MySQL数据导入导出(一)

今天遇到一个需求&#xff0c;要用自动任务将一张表的数据导入另一张表。具体场景及限制&#xff1a;将数据库A中表A的数据导入到数据库B的表B中&#xff08;增量数据或全量数据两种方式&#xff09;&#xff1b;体系1和体系2只能分别访问数据库A和数据库B。附图&#xff1a; 实…

360桌面计算机,360桌面管理软件

360桌面管理是从360安全卫士中单独提取出来&#xff0c;让你无需安装360安全卫士就能快速使用桌面助手整理自己的桌面。【功能特色】1、一键整理桌面&#xff0c;眨眼之间变清爽360桌面助手采用收纳盒进行分类管理&#xff0c;支持一键整理电脑桌面&#xff0c;用户只要点击“桌…

基于51的串行通讯原理及协议详解(uart)

串行与并行通讯方式 并行&#xff1a;控制简单&#xff0c;传输速度快。线多&#xff0c;长距离成本较高且同时接受困难。 串行&#xff1a;将数据字节分成一位一位的行驶在一条传输线上进行传输。如图&#xff1a; 同步与异步串行通讯方式 同步串行通讯方式&#xff1a;同步…

计算机四级考试题数据库,计算机四级考试《数据库系统工程师》试题及答案

计算机四级考试《数据库系统工程师》试题及答案计算机四级备考工作正在火热进行中&#xff0c;为帮助考生们更好地复习备考&#xff0c;以下是百分网小编搜索整理的一份计算机四级考试《数据库系统工程师》试题及答案&#xff0c;供参考练习&#xff0c;预祝考生们考出自己理想…

二层环路保护,RRPP多环的配置

作者:邓聪聪 组网需求&#xff1a; 局域网中&#xff0c;由A/B/C/D构成RRPP域1换网络结构&#xff0c;要求环网机构中的任意两条线路中断都不能影响业务。 配置思路&#xff1a; 环路由两部分组成&#xff0c;ring1、ring2&#xff0c;B为环1的主节点&#xff0c;G0/0/2为主端口…

如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)

原标题&#xff1a;高速线材厂轧钢工艺培训(活套)活套现代高速线材轧机为保证产品尺寸精度&#xff0c;采用微张力及无张力轧制&#xff0c;以消除轧制过程中各种动态干扰引起的张力波动和由此引起的轧件尺寸波动。由于精轧机组为集体传动&#xff0c;故精轧采用微张力轧制&…

Linux服务部署之NTP时间服务器

Linux服务部署之NTP时间服务器&#xff1a; 服务器端IP&#xff1a;192.168.11.119 client端Ip&#xff1a; 192.168.11.101 先安装服务器端ntp: 首先先查看是否安装了ntp时间服务器; ~]# rpm -q ntp >查看是否安装了ntp服务器&#xff1b; 如果没有&#xff0c;安装服务器…

Dubbo架构设计详解

Dubbo是Alibaba开源的分布式服务框架&#xff0c;它最大的特点是按照分层的方式来架构&#xff0c;使用这种方式可以使各个层之间解耦合&#xff08;或者最大限度地松耦合&#xff09;。从服务模型的角度来看&#xff0c;Dubbo采用的是一种非常简单的模型&#xff0c;要么是提供…

new 3ds右摇杆测试软件,电击杂志编辑新3DS评测:防抖3D效果拔群!

电击杂志日前在本周杂志上看在了10月11日任天堂将会发售新型3DS主机“新3DS”与“新3DS LL”的上手报告。究竟新版3DS表现如何&#xff1f;让我们一窥究竟。新3DS与新3DS LL“新3DS”与“新3DS LL”是于8月29日配信的“任天堂8月29日3DS直面会”中发表的&#xff0c;主要特点是…

计算机cad比例尺1 150,CAD图纸里面 1:50 和:1:100和1:150三个比例分别怎么换算...

CAD图纸里面 1&#xff1a;50 和&#xff1a;1&#xff1a;100和1&#xff1a;150三个比例分别怎么换算以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;CAD图纸里面 1&#xff1a;50 和&…

Thread类学习(一)

Thread类API中的英文描述&#xff1a; file:///D:/Java/JDK8/Docs/docs/api/index.html 英语不好&#xff0c;大致的意思是&#xff1a; 线程是程序执行时的线程&#xff0c;java虚拟机(JVM)允许一个应用运行多个线程(并发)。 每一个线程都自己的优先权&#xff0c;优先级高的线…

做企业网站为什么要服务器呢,企业为什么要建站?

一、企业建站为何要建立自己的网站1、企业建站的第1个好处就是树立企业形象酒香不怕巷子深&#xff0c;说的就是线下企业经营时以自身企业形象带来的效果&#xff0c;但企业在网上经营活动时&#xff0c;一方面没有大量老客户支援&#xff0c;另一方面陌生人也没有信任感&#…