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?
Ответы
Ответ 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" />
Возможно, вы захотите сделать это только на странице, с которой вы столкнулись?