2010-06-01 2 views
20

У меня есть несколько <input type="number"> элементов на моей интернет-странице. Я использую jQTouch, и я стараюсь постоянно оставаться в полноэкранном режиме; то есть горизонтальная прокрутка плохая. Всякий раз, когда я нажимаю элемент <input>, страница прокручивается вправо, показывая черную рамку справа от экрана и децентрифрируя все. Входы смещены слева от экрана, и они начинаются где-то к середине страницы.Предотвращение элемента <input> от прокрутки экрана на iPhone?

Как предотвратить эту прокрутку по фокусу?

+0

Возможный дубликат [Отключить прокрутки при изменении формы фокус элементы Ipad веб-приложение] (HTTP: //stackoverflow.com/questions/6740253/disable-scrolling-when-changing-focus-form-elements-ipad-web-app) –

+1

Ни один из ответов на этот вопрос и этот вопрос не верны. –

ответ

14

Я только что нашел решение этой проблемы в этом посте Stop page scrolling from focus

Просто добавьте onFocus="window.scrollTo(0, 0);" к вашему полю ввода, и вы сделали! (Пробовал с <textarea> и <input type="text" /> на IPad, но я уверен, что он будет работать на iPhone тоже.)

Я боялась, что скроллинг будет виден как мерцание или что-то, но, к счастью, то есть не тот случай!

+0

идеальное решение - протестировано на iPod5 iOS7! – Vestalis

+6

Кажется, что он должен работать, но он не работает для меня на iPhone 5S с iOS 8 в Safari. 'event.preventDefault()' в сочетании с вашим решением кажется, что он определенно будет работать, но я по-прежнему получаю поведение прокрутки по умолчанию. – Benny

+0

не работает на iPhone5 iOS10 cordova 7.1.0 проверить кешью. –

6

вот как я решил это на iPhone (мобильный Safari) (я использовал JQuery)

1) создать глобальную переменную, которая содержит текущую позицию прокрутки, и который обновляется каждый раз, когда пользователь прокручивает окно просмотра

var currentScrollPosition = 0; 
$(document).scroll(function(){ 
    currentScrollPosition = $(this).scrollTop(); 
}); 

2) привязать событие фокусировки к соответствующему полю ввода. при фокусировке, прокрутите документ до текущего положения

$(".input_selector").focus(function(){ 
    $(document).scrollTop(currentScrollPosition); 
}); 

Ta Da! Нет раздражающего «прокрутки по фокусу»

Следует иметь в виду, что поле ввода ВЫШЕ клавиатуру, иначе вы спрячете поле. Это можно легко смягчить, добавив if-clause.

2

Я бы рекомендовал использовать метод jQuery.animate() linked to above, а не только window.scrollTo (0,0), поскольку iOS анимирует свойства смещения страницы при фокусировке элемента ввода. Вызов window.scrollTo() только один раз может не работать со временем этой родной анимации.

Для получения дополнительной информации, iOS анимирует pageXOffset и pageYOffset свойствами window. Вы можете сделать проверку условий на эти свойства, чтобы ответить, если окно сдвигается:

if(window.pageXOffset != 0 || window.pageYOffset != 0) { 
    // handle window offset here 
} 

Таким образом, чтобы расширить свое присутствие на вышеуказанной ссылке, это будет более полный пример:

$('input,select').bind('focus',function(e) { 
    $('html, body').animate({scrollTop:0,scrollLeft:0}, 'slow'); 
}); 
+0

подтвердите, установка scrollTop не работает, анимация с минимальным временем в 1 мсек. анимировать его с помощью 0 мсек не удалось - возможно, его нужно добавить в очередь событий или что-то еще – commonpike

+0

любое решение для скачкообразного поведения? Это выглядит ужасно, когда страница прокручивается вверх, а затем снова сбрасывается. preventDefault() не помогает –

0

Если фокус устанавливается программно, это то, что я сделал бы:

Сохраните значение scollTop окна перед изменением фокуса. Затем восстановите scrollTop до сохраненного значения сразу после настройки фокуса.

При использовании JQuery:

var savedScrollTop = $(document).scrollTop(); // save scroll position 
<code that changes focus goes here> 
$(document).scrollTop(savedScrollTop); // restore it 
-4

Попробуйте это, я думаю, что проблема является увеличение:

<meta name="viewport" content="width=device-width;initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> 
+0

Это фактическое решение, добавляющее , чтобы моя страница фиксировала прокрутку. –

Смежные вопросы