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 ...
随机推荐
- 面对大规模 K8s 集群,如何先于用户发现问题?
简介: 怎样才能在复杂的大规模场景中,做到真正先于用户发现问题呢?下面我会带来我们在管理大规模 ASI 集群过程中对于快速发现问题的一些经验和实践,希望能对大家有所启发. 作者 | 彭南光(光南)来源 ...
- [GPT] swoole的协程和golang的协程有什么区别,哪个更好
Swoole 的协程和 Golang(Go 语言)的协程(Goroutine)在概念上都是为了实现轻量级的并发编程,但它们在具体实现.使用方式和性能特点上有所不同: 实现原理: Golang 协程(G ...
- The instance of entity type 'Model' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.
The instance of entity type 'Model' cannot be tracked because another instance with the same key val ...
- 四:大数据架构回顾-IOTA架构
IOTA大数据架构是一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念.IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生.计算和查询过程当中, ...
- 【详细教程】手把手教你开通YouTube官方API接口(youtube data api v3)
一.背景调查 1.1 youtube介绍 众所周知,youtube是目前全球最大的视频社交平台,该平台每天产生大量的视频内容,涵盖各种主题和类型,从音乐视频到教育内容,再到娱乐节目和新闻报道等.You ...
- ORA-600 [kkqjpdpvpd: no join pred found.]
场景 一个比较大的sql查询,报出了ORA-600 [kkqjpdpvpd: no join pred found.] 解决方法: 根据metalink提供的解决思路.当于当前session,执行如下 ...
- LogAgen的工作流程
LogAgen的工作流程: 一.读日志 --tailf 第三方库 新建tail_test/main.go package main import ( "fmt" "git ...
- Ubuntu 上安装 Docker
步骤 1:删除任何现有的 Docker 包 但在跳到安装部分之前,有必要删除所有以前安装的 Docker. 要 卸载以前的 Docker,请使用以下命令. sudo apt remove docker ...
- OpenNESS & OpenVINO Demo 部署
目录 文章目录 目录 部署架构 部署 Edge Controller 基础配置 配置 Proxy 配置防火墙 Install necessary package Install MySQL Insta ...
- kubernetes运行应用Controller3之Job、CronJob详解
成功启动一个Job 1.Job.spec.template.metadata,没有空格符的错误 [machangwei@mcwk8s-master ~]$ cat mcwJob1.yml apiVer ...