@sanex3339

Какой самый правильный способ сделать фиксированный оверлей в safari ios?

Итак, мне надо при скролле страницы в ios отобразить fixed оверлей размерами с окно (100% width/ 100% height от значений window). Казалось бы, плевое дело, но этот оверлей та ещё морока.
Делаю я его через position absolute. Что бы оверлей рисовался четко по тому месту, где в данный момент находится viewport, top и left вычисляю на js.
Но беда в том, что при быстром скролле страницы оверлей в итоге рисуется не под текущим расположением viewport'а, а со сдвигом.
Выяснял я причину и нашел её - у сколла в safari есть инерция, и оверлей рисуется в момент окончания скролла, а он после, страница ещё по инерции немного двигается.
Ну ок, добавим setInterval, миллисекунд на 300, что бы оверлей рисовался уже после окончания инерции скролла. Так нет же, все равно он иногда рисуется не там, где нужно.

Собственно, есть ли где туториал, гайд, совет или готовый пример, как 100% красиво и правильно сделать для этого сафари в этой ios фиксированный оверлей под 100% размеры окна, что б он никуда не съезжал, ну вообще никуда, даже на 1 пиксель не съезжал.

PS: под андроидом все работает отлично
  • Вопрос задан
  • 1341 просмотр
Решения вопроса 1
PretorDH
@PretorDH
HTML5, CSS3, PHP, JS - люблю в чистом виде.
Блоки Fixed видимо идут в потоке - что и тянет за собой выше описанные проблемы.
Попробуй так JSfiddle, должно помочь.

html,body {
    position:absolute;
    top:0;bottom:0;
    left:0;right:0;
    overflow:hidden;
}
body {
    overflow:auto;
}
.modal {
    position:fixed;
    top:0;bottom:0;
    left:0;right:0;
}


ДОБАВЛЕНО:
Если создаешь модальное окно динамично, в модальной форме на любой елемент input добавь autofocus:
<input id="yourtextbox" ... autofocus />
Если критично в .js запомни позицию скрола в нужных элементах, при автофокусировке скролы могут уехать куда вздумается. А если модальное есть в документе но спрятано, то в функции показа модального можно добавить:
function setFocusToTextBox(){
    var textbox = document.getElementById("yourtextbox");
    textbox.focus();
    textbox.scrollIntoView();
}

А после закрития модального окна восстанови эти позиции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
neuotq
@neuotq
Прокрастинация
А почему нельзя position:fixed ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы