我们在工作中遇到了类似的问题,我在您(出色的)演示页面上偶然发现了这个问题。
正如您所提到的,偏移量始终是页面高度的 ~50%,无论您的初始偏移量在哪里都会发生这种情况。
在过去,当我观察到与早期 iOS 版本类似的“跳跃”(尽管没有那么剧烈的跳跃)时,我通常通过将position: fixed(或relative)应用于body 来解决这个问题(this allows overflow: hidden to properly work)。
但是,如果用户向下滚动,这会导致用户自动返回页面顶部。
所以,如果您愿意通过一些 JavaScript 来解决这个问题,这里是我整理的修复/破解:
// Tapping into swal events
onOpen: function () {
var offset = document.body.scrollTop;
document.body.style.top = (offset * -1) + 'px';
document.body.classList.add('modal--opened');
},
onClose: function () {
var offset = parseInt(document.body.style.top, 10);
document.body.classList.remove('modal--opened');
document.body.scrollTop = (offset * -1);
}
CSS 是什么样子的:
.modal--opened {
position: fixed;
left: 0;
right: 0;
}
这是演示页面的一个分支,用于说明:https://jpattishall.github.io/sweetalert2/ios-bug.html
对于那些正在寻找更通用修复的人,您可以在打开/关闭模式时执行以下操作:
function toggleModal() {
var offset;
if (document.body.classList.contains('modal--opened')) {
offset = parseInt(document.body.style.top, 10);
document.body.classList.remove('modal--opened');
document.body.scrollTop = (offset * -1);
} else {
offset = document.body.scrollTop;
document.body.style.top = (offset * -1) + 'px';
document.body.classList.add('modal--opened');
}
}
编辑:需要注意的一点是,我们并没有盲目地将修复应用于所有设备/平台,仅适用于 iOS Safari。我在您的另一个问题中注意到您不喜欢溢出:由于滚动条出现/消失时页面的移动而隐藏(我完全同意)。我建议只将 JS 应用到 iOS 设备上。