ScrollTop в мобильном Safari не работает - программирование
Подтвердить что ты не робот

ScrollTop в мобильном Safari не работает

Я потратил последний час на чтение многочисленных вопросов по масштабированию и .scrollTop(), а также вариации обработок и попробовал как минимум 20 разных вещей - все, что выглядело даже отдаленно выполнимым для моей ситуации, и у меня все еще есть только частичная решение.

У меня есть форма, которая имеет три поля и кнопку для продолжения. Кнопка продолжения открывает оставшуюся часть формы. Мобильный мобильный телефон Safari, когда вы выбираете текстовые поля. Я не против этого. Если я предотвращу масштабирование, он может быть слишком мал, чтобы читать поля, и если я загружаюсь с читаемым уровнем масштабирования, вы можете видеть только часть страницы, поэтому изменение масштаба в порядке.

Ситуация заключается в том, что после нажатия кнопки и появления другой половины формы окно по-прежнему масштабируется, и вы смотрите на случайный патч страницы.

Из того, что я могу себе представить, могут быть два манипуляции:

1) На самом деле масштабирование после нажатия кнопки
2) Прокрутка туда, где появляется следующая часть формы

Я пробовал все, что мог найти при масштабировании, и обработка тега viewport content width в теге meta срабатывает, но не обрабатывает его для меня, поскольку он просто увеличивает или уменьшает область просмотра и фактически не масштабирует вообще нет. Потенциально это работает для других, но не для меня, поскольку у меня уже много стилей, которые могут сделать это не вариантом.

Я решился на решение прокрутки, и .scrollLeft() работает нормально, но .scrollTop() не будет работать независимо от того, какой селектор я ему даю. Я пробовал:

$('body').scrollTop
$('html').scrollTop
$('document').scrollTop
$('body,html,document').scrollTop
$('html:not(:animated),body:not(:animated)').scrollTop
$('html:not(:animated),body:not(:animated),document:not(:animated)').scrollTop
$('#content').scrollTop // that a wrapper div
$(window).scrollTop

Кто-нибудь знает, как получить .scrollTop() для работы в Safari Mobile?

4b9b3361

Ответ 1

Я думаю, вы пытаетесь решить все неправильно. Просто убедитесь, что поля вашей формы имеют font-size: 16px в мобильных видовых экранах, таким образом Safari не будет увеличивать масштаб.

Также scrollTop может не работать, если у вас есть position: fixed на вашем контейнере.

Ответ 2

Вы пытались использовать якоря?

Они должны работать везде, потому что они являются нативной функцией браузеров.

Оригинальная запись с этим кодом здесь

$(function() {
  $('a[href*="#"]:not([href="#"])').on('click', function() {
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
      if (target.length) {
        $('html, body').animate({
          scrollTop: target.offset().top
        }, 1000);
        return false;
      }
    }
  });
});

Ответ 3

Не нужно использовать jquery для этого:

window.scrollTo(0, 0);

Вы также можете предотвратить масштабирование вместе с помощью метатега:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

Возможно, вы захотите сделать это только на странице, с которой вы столкнулись?