Мы сталкиваемся с аналогичной проблемой на работе, и я наткнулся на этот вопрос на вашей (отличной) демонстрационной странице.
Как вы упомянули, смещение всегда составляет ~ 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
И для тех, кто ищет более общее исправление, вы можете сделать что-то вроде следующего ING при открытии/закрытии модального:
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');
}
}
Edit: Одна вещь, чтобы отметить, что мы не применить исправление для всех устройств/платформ вслепую, только IOS Safari. Я заметил в вашем другом вопросе, что вы не поклонник переполнения: скрытый из-за смещения страницы, когда полоса прокрутки появляется/исчезает (с которой я полностью согласен). Я бы предложил просто применить JS к устройствам iOS.
У вас есть setTimeout или setInterval функции в вашем javascript? – poashoas
Да, функция ввода автофокуса [работает с 'setTimeout()'] (https://github.com/limonte/sweetalert2/blob/bf1ee4299f3d52256ba049aa830dc16844fa220c/src/sweetalert2.js#L375-L382) из-за анимации –
Это произошло только один раз в iOS Safari, и это не произошло после этого. Но в хроме это происходит каждый раз. – Prav