当我使用手机浏览器或者微信浏览器打开网页的时候,上下滑动页面,页面就会出现黑色的空白(如图所示)。我应该怎么做才能禁止滑动。因为他现在和我的上下滑动手势冲突了,无法进行滑动操作。
当我使用手机浏览器或者微信浏览器打开网页的时候,上下滑动页面,页面就会出现黑色的空白(如图所示)。我应该怎么做才能禁止滑动。因为他现在和我的上下滑动手势冲突了,无法进行滑动操作。
网上所有的方法大概都试了下 要么不行 要么有兼容问题,下面直接一句css解决了问题:
body:before {
width: 100%;
height: 100%;
content: ' ';
position: fixed;
z-index: -1;
top: 0;
left: 0;
background: #fff;
}
你可以监听页面滑动的距离,当滑动到顶部的时候,你就把滑动的距离用一个变量接收到,然后用transform:translateY(-y);(y就是那个变量的值)意思就是你滑动到顶部了,滑动一点距离,你就把网页上移一点距离,这样子,那个背景就不会显示出来了(感觉应该可以实现吧,只是可能会出现不流畅的效果,没有亲测过)
为了解决ios的弹性滚动和微信冲突导致列表触顶后很难滚动,在android并没有阻止微信的弹性滚动
let scrollEle = document.body;
scrollEle.addEventListener('touchstart', (evt) => {
// 修复微信的黑色弹性滚动与ios冲突问题
let scrollTop = scrollEle.scrollTop;
let scrollHeight = scrollEle.scrollHeight;
let height = scrollEle.offsetHeight;
let scrollTopTo;
// 顶部
scrollTopTo = Math.max(scrollTop, 1);
// 底部
if(scrollTopTo === scrollHeight - height) {
scrollTopTo--;
}
if(scrollTop != scrollTopTo) {
scrollEle.scrollTop = scrollTopTo;
}
});
原理:因为微信的弹性触发机制是手指按下时,scroll元素是否触顶。因此为了避免触发此特性,当手指按下时将scroll元素上移1px,这样就无法触发微信的弹性滚动,但是此时ios的弹性滚动依然生效。
底部的情况由于ios弹性滚动能够使scrollTop超过可滚动距离,因此只判断严格的触底条件即可。
<meta name="x5-fullscreen" content="true">
<meta name="full-screen" content="yes">
一直不太建议为了一些体验的问题来使用全局监听touch事件,这会让页面里的其他元素的一些属性出现问题。
加上这两个meta放在head里,可以让微信,qq,uc浏览器使用全屏模式,全屏模式里,浏览器是不会上下左右滑动出现背景的。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
自问自答。事件监听添加禁止。
顺便说一下preventDefault()。
换句话说,就是将这个元素的专属动作禁止。
我见过有一些插件是这么写的。
目的就是禁止的跳转。也就说明了event.preventDefault();可以禁止a元素的专属动作。