这两天开发移动端H5因为ios 自带的滑动属性导致页面里滑动时ios系统下 在边界滑动动画未结束前 滑动页面导致页面无法滑动,需等待ios边界动画结束后才能滑动。
由于页面是微前端 出问题的和真正能简单控制的层面在我项目外面了
网上一顿找方法 没什么吊用 出问题的不在我这里
overflow: hidden;
overscroll-behavior: none;
-webkit-overflow-scrolling: auto;
overflow-scrolling: auto;
于是就找到监听touchmove的方法
addEventListener的时候e.preventDefault();
removeEventListener的时候也这么弄一下不就行了;
结果您猜怎么着 对 就是不行
之前从来没有仔细的研究过这里
这是我之前的写法
const checkedTarget = (e) => {
if (!isTarget) {
e.preventDefault();
}
}
document.addEventListener('touchmove', (e) => {
checkedTarget(e)
}, { passive: false });
// 触摸移动事件
document.removeEventListener('touchmove', (e) => {
checkedTarget(e)
}, { passive: false });
实际是错的
网上一顿找 智障ai也问了一堆 没d用
最后偶然间看到网上的大佬说了这么一句话 我悟了:
一:相同事件绑定和解除,需要使用共用函数;
二:共用函数不能带参数;
于是我改成
document.addEventListener('touchmove', checkedTarget, { passive: false });
document.removeEventListener('touchmove', checkedTarget, { passive: false });
补充一下这样写也是不对的 因为不满足第一个条件
document.addEventListener('touchmove', (e) => e.preventDefault(), { passive: false });
// 触摸移动事件
document.removeEventListener('touchmove', (e) =>e.preventDefault(), { passive: false });
至此,彩笔艺术已成!
后来我找到更简单的办法 在自己的页面不想让滑动的位置可以给设置属性 无论是动态设还是css写死 均可
给不想让ios用户点击能滑动的地方设置上 这些地方在安卓机上本来也是滑动不了的
一行代码能解决的问题 由于pc上没有ios模拟器以及没有用ios手机本地调试 需要改完打包发版 借手机看效果 被我研究了多半天的时间 恨自己菜啊
touch-action: none;