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,一经查实,立即删除!

相关文章

html代码 打开本地文件,打开本地HTML文件

我在布局中有一个textview(名为-t_c),代码为: -android:id"id/GoToTCContacting"android:layout_width"360dp"android:layout_height"wrap_content"android:layout_marginLeft"2dp"android:layout_marginRight&…

元组,字符串的基础

元组,字符串, a(1,2,3,4,56,) type(a) print(type(a)) #元祖就是不可变列表 usernameinput("username:") if username.strip()"spencer": #语句能够让输入的内容多按空格:移除空白print("welcome") names"…

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

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

node转发请求 .csv格式文件下载 中文乱码问题 + 文件上传笔记

用户无法直接访问后台接口 需要node端转发请求 并将数据以.csv文件格式生成以供客户端下载。 很不幸出现了中文乱码的问题 挖了各种坟帖,下了各种依赖包,csv、json2csv、bufferHelper、iconv-lite等等 多次尝试后 发现真正起作用的只有iconv-lite这个库 …

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

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

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

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

计算机怎样辅助英语听力教学方法有哪些,计算机辅助教学在英语听力中的运用.doc...

计算机辅助教学在英语听力中的运用.docPAGEPAGE 5计算机辅助教学在英语听力中的运用摘要:随着现代科学技术与电脑的发展,计算机辅助教学比以往运用的更加广泛,在计算机的帮助下,我们可以把大量的网上信息运用到英语教学中&#xf…

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

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

计算机科学与导论期末论文,计算机科学与导论论文3

由下到上按左到右的顺序排列,则11用二进制表示为1011。4.3.3整数的机器数表达方法A、一般表示法首先将数转换成二进制;忽略符号,左侧用0补充空位至指定位数-1;如果是正数,在最高位加0,如果是负数则加1。例如…

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; 实…

收藏夹库计算机网络的关系,云南省计算机一级考试题库 计算机网络及基础.pdf...

云南省计算机一级考试题库 计算机网络及基础云南省计算机一级考试题库:第六章计算机网络及 Internet 基础一、是非题1&#xff0e;分布式处理是计算机网络的特点之一。A&#xff0e;对 B&#xff0e;错2&#xff0e;组建一局域网时&#xff0c;网卡是必不可少的网络通讯硬件。A…

春考计算机组装维修知识点,【校选修】计算机组装与维修 考试题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼需要的拿走 不需要的。。忽略1.简述主板概念主板&#xff0c;又叫主机板、系统板和母板&#xff1b;它安装在机箱内&#xff0c;是微机最基本的也是最重要的部件之一。 主板一般为矩形电路板&#xff0c;上面安装了组成计算机的主…

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

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

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

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

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

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

Java生鲜电商平台-团购模块设计与架构

Java生鲜电商平台-团购模块设计与架构 说明&#xff1a;任何一个电商系统中&#xff0c;对于促销这块是必不可少的&#xff0c;毕竟这块是最吸引用户的&#xff0c;用户也是最爱的模块之一&#xff0c;理由很简单&#xff0c;便宜。 我的经验是无论是大的餐饮点还是小的餐饮店&…