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 ...
随机推荐
- 更便捷:阿里云DCDN离线日志转存全新升级
简介: 1月6日,阿里云CDN年度产品升级发布会中,阿里云CDN产品专家邓建伟宣布DCDN离线日志转存全新升级,并对离线日志转存方案的价值.应用及使用进行了详细解读. 在日常CDN加速服务过程中会产生 ...
- 双11特刊|一站式在线数据管理平台DMS技术再升级,高效护航双11
简介: 10万+企业共同选择的数据库服务平台 阿里云数据库已连续多年稳定支撑天猫双11,历经极端流量场景淬炼.除了保障稳定顺滑的基本盘,今年大促期间数据库通过全面云原生化,大幅提升用户体验,让技术帮 ...
- 探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现
本文将和大家介绍专为 WPF 触摸模块提供的 ITabletManager 的 GetTabletCount 方法在 Windows 11 系统的底层实现 本文属于 WPF 触摸相关系列博客,偏系统底 ...
- 阿里云OSS文件上传几种方法(主要是前端)
目录 零.准备 一.服务端签名后直传 1. 阿里云控制台配置 2. 后端接口开发(PHP) 3. 前端获取签名后上传 二.使用STS临时凭证进行上传 1. 后端接口开发(node) 2. 前端获取临时 ...
- 设计模式之装饰器-AOP
HelloWorld简单例子如下:此例子好好体会下继承 is a和组合 has a的异同. using System; using System.Runtime.InteropServices; na ...
- Codeforces Good Bye 2023
A. 2023 正常签到. void solve() { int n, k, ok = 1; cin >> n >> k; int t = 2023; while(n --) ...
- SAP Adobe Form 教程五 图片
前文: SAP Adobe Form 教程一 简单示例 SAP Adobe Form 教程二 表 SAP Adobe Form 教程三 日期,时间,floating field SAP Adobe F ...
- JDK源码阅读-------自学笔记(十四)(java.util.Calendar日历类)
Calendar 提供了关于日期计算的相关功能,比如:年.月.日.时.分.秒的展示和计算. GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的 ...
- JDK源码阅读-------自学笔记(三)(java.lang.String String用法和描述浅析)
一.源码特点 final约束,使得String不能被继承,内部其他也不能被继承 String用来表示字符串,或字符序列,序列即为数组 内建数组private final char value[];但是 ...
- 使用IIS部署WebDAV
服务器开启WebDAV 在服务器安装IIS的同时 要启用Windows身份验证与WebDAV发布 如果不是服务器版本,参照下图 在IIS中新建WebDAV网站 配置好本地目录与端口 启用Windows ...