H5弹窗底层滑动
H5弹窗底层滑动
背景
- 产品提出H5 弹出窗滑动时,底层页面也会跟随滑动,需要调整禁止底层滑动,增加用户体验。
问题产生原因
- ios 滑动时有回弹效果
- 顶层元素滑动默认行为
解决办法
- 阻止元素的默认(此方法会阻止整个页面滑动,导致在弹出窗内容也不能滑动。)
- 影藏body高度,使页面高度小于弹窗高度(次方法会影响页面布局,暂时不做记录)
代码块
- 阻止元素默认行为
- 使用 addEventListener 监听 touchmove 事件
注:当弹窗消失时要 移除 touchmove 事件监听以免影响页面滑动
// 简单屏蔽弹窗滑动
function noSwiperTouch(className, isAdd = true) {
if(isAdd) {
document.querySelector(className).addEventListener('touchmove', noTouch);
} else {
document.querySelector(className).removeEventListener('touchmove', noTouch);
}
}
function noTouch(e) {
e.preventDefault();
}
优化可以使内部元素可以滑动
// 阻止背景
let iosTrouchFnEl = null;
function iosTrouchFn(className, isAdd) {
iosTrouchFnEl = document.querySelector(className);
//el需要滑动的元素
if(isAdd) {
iosTrouchFnEl.addEventListener('touchmove',function(e){
e.isSCROLL = true;
})
document.body.addEventListener('touchmove', preventSwiping, {passive: false})
} else {
document.body.removeEventListener('touchmove', preventSwiping);
}
//passive防止阻止默认事件不生效
}
function preventSwiping(e){
if(!(e as any).isSCROLL){
e.preventDefault(); //阻止默认事件(上下滑动)
}else{
//需要滑动的区域
let top = iosTrouchFnEl.scrollTop; //对象最顶端和窗口最顶端之间的距离
let scrollH = iosTrouchFnEl.scrollHeight; //含滚动内容的元素大小
let offsetH = iosTrouchFnEl.offsetHeight; //网页可见区域高
let cScroll = top + offsetH; //当前滚动的距离
//被滑动到最上方和最下方的时候
if(top == 0){
top = 1; //0~1之间的小数会被当成0
}else if(cScroll === scrollH){
iosTrouchFnEl.scrollTop = top - 0.1;
}
}
}
H5弹窗底层滑动的更多相关文章
- 一个H5的3D滑动组件实现(兼容2D模式)
起由 原始需求来源于一个项目的某个功能,要求实现3D图片轮播效果,而已有的组件大多是普通的2D图片轮播,于是重新造了一个轮子,实现了一个既支持2D,又支持3D的滑动.轮播组件. 实现思路 刚一开始肯定 ...
- 移动端H5页面惯性滑动监听
移动端H5页面惯性滑动监听 在移动端,当你快速滑动有滚动条的页面时,当你手指离开屏幕时,滚动条并不会立即停止,而是会随着"惯性"继续滑动一段距离. 在做项目的过程中,需要监听惯性滑 ...
- 玩转 H5 下拉上滑动效果
在APP中我们经常会在页面下拉时看到一些动效,例如下拉图片跟随放大.下拉刷新出现loading动画等,这个交互细节在各个主流APP以及手机原生系统中随处可见,能为APP增添个性亮点. 一.背景 在我们 ...
- 玩转 H5 下拉上滑动效
按照上面的技术方案实施,具体过程为: 禁用页面顶部下拉事件 ------> 将页面的主体内容用一个DIV容器包含起来,同时复制需要放大处理的内容节点至主体内容之外 ------> 绑 ...
- h5移动端滑动的细节
1.获取手指滑动的长度: var hasTouch = 'ontouchstart' in window && !isTouchPad, _start:function(e){ var ...
- 安卓下H5弹窗display:table的bug
表单以弹窗的形式弹出时,若设置了表单的div:display:table下,安卓打开页面输入法的时候,表单顶到屏幕顶部之后,再也无法上滑,键盘遮住了下面的输入框.在ios下,一切显示正常,因为iOS会 ...
- 微信H5单页面滑动的时候如何避免出界,出现头部和底部的黑底?
ios系统微信浏览器.safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法 ios偶现下拉出现黑底时,界面第一次上拉时拉不动的解决方案: document.querySelector('# ...
- h5调用底层接口的一些知识
之前接触过这方面的知识,一直想写一些关于代码的文字,但考虑到浪费时间,又不具备大神的实力,也不想去把别人的代码照搬过来,所以一直都是空白着的,今天敲代码的时候,有了一个比较好的想法,第一,定位在学习这 ...
- 完美解决移动端H5页面的滑动穿透问题
同事的分享,记录下来. 代码如下: css: body.modal-open { position: fixed; width: 100%; } js: // 兼容低版本 document.scrol ...
- app内嵌 h5页面 再滑动的时候 触发击穿底下的一些touchstart事件
我们的目的是再滑动的时候 不要触发到touchstart事件. // 再滑动的时候无法点开视频 var is_scroll_start,is_scroll_end; $(window).on({ 't ...
随机推荐
- 10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能
简介: 在存储计算分离的场景下,通过网络从远端存储读取数据是一个代价较大的操作,往往会带来性能的损耗.以OSS为例,OSS数据读取延时通常较本地磁盘大很多,同时OSS对单个用户使用的带宽上限做了限制, ...
- 慢sql治理经典案例分享
简介:菜鸟供应链金融慢sql治理已经有一段时间,自己负责的应用持续很长时间没有慢sql告警,现阶段在推进组内其他成员治理应用慢sql.这里把治理过程中的一些实践拿出来分享下. 作者 | 如期 来 ...
- 【ClickHouse 技术系列】- ClickHouse 中的嵌套数据结构
简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...
- Forrester云原生开发者洞察白皮书,低代码概念缔造者又提出新的开发范式
简介: 云原生时代的到来为开发者群体带来了前所未有的机遇,让开发者可以更加专注业务价值创造与创新,并使得人人成为开发者成为现实.广大开发者如何转型成为云原生开发者?运维等专业人员在云原生时代如何避免边 ...
- [MySQL] 原生全文检索 fulltext 的简单应用
在目标字段上添加全文检索:alter table 表名 add fulltext(字段) with parser ngram 查询语句:select * from xxx where match(字段 ...
- Multisim仿真验证之二极管的特性参数
二极管的特性 正向 R1 10% 20% 30% 50% 70% 90% Vd/mV 299 543 583 608 627 658 Id/mA 0.01 0.1 0.6 1.4 2.8 7.2 rd ...
- XTuner 微调 LLM实操-书生浦语大模型实战营第二期第4节作业
这一作业中提及的解释比较少,更多的只是一些步骤截图.这是因为教程中已经提及了几乎所有的细节信息,没有什么需要补充的.这个页面相较于官方教程的部分解释得过于详细的内容甚至是有所删减的.比如关于文件路径可 ...
- golang 常用操作
golang 获取切片 slice 第一个 最后一个 元素 复合数据类型切片通常用作Go中索引数据的口语结构. 该类型[]intSlice是具有类型为integer的元素的切片. len函数用于获取切 ...
- laravel-cms学习笔记
学习地址: https://www.houdunren.com/edu/video/12045 laravel 文档地址: https://gitee.com/houdunren/code/blob/ ...
- WEB服务与NGINX(25)- LNMP架构-WEB集群部署phpmyadmin
目录 1 LNMP架构-WEB集群部署phpmyadmin 1.1 WEB集群架构需求分析 1.2 WEB集群架构环境 1.3 部署mariadb 1.4 部署web服务器nginx 1.5 部署re ...