微信公众号H5页面或者其他浏览器,在ios一些机型上,上下左右滑动,可以漏出底部的域名,黑块(或者白块)。
搜索很多网上文档,大都是那几种,但是不顶用

测试环境: ios14.6、微信内置浏览器、或其他浏览器
原理: 修改document的滚动事件,监听滚动赋值元素的scrollTop值

修改如下:

<!-- 原生标签和vue、uniapp等可用,react项目基本上不需要,没碰到露底异常 -->

<template>
	<view id='scrollBox'>
		<view>测试内容</view>
		<view>测试内容</view>
		<view>测试内容</view>
	</view>
</template>


// 拦截document的滚动事件 - 其他的方式我试了没什么用,拦截不掉
document.addEventListener('touchmove', e => e.preventDefault(), {
	passive: false
});

let $startY; //记录开始高度
setTimeout(() => {
	// 防止虚拟的dom节点scrollBox 没有创建成功
	document.getElementById("scrollBox").addEventListener("touchstart", function() {
		$startY = event.touches[0].clientY;
	})
	document.getElementById("scrollBox").addEventListener("touchmove", function(event) {
		let $moveY = event.touches[0].clientY;
		document.getElementById('scrollBox').scrollTop += $startY - $moveY;
		$startY = $moveY; //记录上一步结束位置
	});
})


	#scrollBox {
		/* 高度和溢出一定要设置,body不需要额外设置 */
		height: 100vh;
		overflow-y: auto;
	}

	#scrollBox view {
		/* 测试样式 - 可忽略 */
		height: 50vh;
		background: #ccc;
	}

备注:

  1. scrollBox 元素一定要设置高度和溢出滚动,body不需要额外设置
  2. js代码里 计时器尽量加上,原生写法不需要,可以在window.onload 或者 $(function(){}) 方法内部即可
  3. 此处理方案,不是最优解。原始的页面惯性滚动的感觉没有了,现在手指滑动多少滚动多少

到此结束,就那么多代码。有兴趣的可以多研究

Logo

前往低代码交流专区

更多推荐