目前没有办法解决这个问题。从 iOS 9.3 开始,仍然没有好的方法来阻止 body 上的滚动。我目前在所有需要它的网站上实现的最佳方法是锁定 html 和正文的高度和溢出。
html, body {
height: 100%;
overflow: hidden;
}
这是防止 iOS 滚动覆盖层/模式后面的内容的最佳方法。
然后为了保留滚动位置,我将内容向后移动,看起来像是保留它,然后当模式关闭时恢复主体的位置。
我用 jQuery 中的锁定和解锁功能来做到这一点
var $docEl = $('html, body'),
$wrap = $('.content'),
$.scrollTop;
$.lockBody = function() {
if(window.pageYOffset) {
scrollTop = window.pageYOffset;
$wrap.css({
top: - (scrollTop)
});
}
$docEl.css({
height: "100%",
overflow: "hidden"
});
}
$.unlockBody = function() {
$docEl.css({
height: "",
overflow: ""
});
$wrap.css({
top: ''
});
window.scrollTo(0, scrollTop);
window.setTimeout(function () {
scrollTop = null;
}, 0);
}
当你把所有这些拼凑在一起时,你会得到http://codepen.io/jerrylow/pen/yJeyoG http://codepen.io/jerrylow/pen/yJeyoG如果您想在手机上测试它,结果如下:http://jerrylow.com/demo/ios-body-lock/ http://jerrylow.com/demo/ios-body-lock/