原因
手指按住屏幕下拉,屏幕顶部会多出一块白色区域。手指按住屏幕上拉,底部多出一块白色区域。()
产生原因
在 iOS 中,手指按住屏幕上下拖动,会触发 touchmove 事件。这个事件触发的对象是整个 webview 容器,容器(body)自然会被拖动,剩下的部分会成空白。
解决方案
监听事件禁止滑动
由此我们找到解决方案,通过监听 touchmove,让需要滑动的地方滑动,不需要滑动的地方禁止滑动。
值得注意的是我们要过滤掉具有滚动容器的元素。
vue中的解决方案如下
var overscroll = function (el) {
el.addEventListener('touchstart', function () {
var top = el.scrollTop
var totalScroll = el.scrollHeight
var currentScroll = top + el.offsetHeight
if (top === 0) {
el.scrollTop = 1
} else if (currentScroll === totalScroll) {
el.scrollTop = top - 1
}
})
el.addEventListener('touchmove', function (evt) {
if (el.offsetHeight < el.scrollHeight) { evt._isScroller = true }
})
}
overscroll(document.querySelector('.main-container'))
document.body.addEventListener('touchmove', function (evt) {
if (evt._isScroller) return
evt.preventDefault()
}, {
passive: false
})
//passive 参数不能省略
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。