Ответ 1
Это сработало для меня:
setTimeout( function() {
$(div).scrollTop(0)
}, 500 );
Я пытаюсь прокрутить до определенного места в прокручиваемом DIV. Прямо сейчас я использую смещение пикселей с помощью функции scrollTop() jQuery, которая отлично работает на настольных браузерах, но она не работает в мобильных браузерах Android, за исключением браузера Google Chrome Android (у меня нет устройства iOS для проверки, если это работает). Все решения, которые я нашел, предназначены для прокрутки страницы (окна), а не для прокрутки в DIV, у кого есть предложения о том, что еще я могу использовать для выполнения одной и той же задачи?
Вот пример:
http://jsfiddle.net/aQpPc/
http://jsfiddle.net/aQpPc/embedded/result/
Другие вещи, которые я пробовал, которые работают в настольных браузерах:
document.getElementById('ID_of_element_in_a_DIV').scrollIntoView();
document.getElementById('ID_of_DIV').scrollTop = 200;
РЕДАКТИРОВАТЬ 3/11/13:
Это проблема с проблемой браузера для Android: https://code.google.com/p/android/issues/detail?id=19625
Один пользователь в отчете об ошибке предложил обходное решение:
потому что проблема возникает только тогда, когда свойство переполнения установите для прокрутки, вы можете сначала установить его на "скрытый", установить scrollTop свойство, затем reset обратно в "прокрутку" (или автоматически). ScrollTop свойство, по-видимому, соблюдается, когда элемент повторно отображается с помощью скроллбары. Неясно, есть ли у этого неожиданные побочные эффекты, но "он работает на моей машине!"
Это сработало для меня:
setTimeout( function() {
$(div).scrollTop(0)
}, 500 );
Работа, которая работала для меня: во-первых, временно установите свойство переполнения на "скрытое", затем установите свойство scrollTop, затем установите свойство переполнения обратно в "прокрутку" (или автоматически). Значение scrollTop, похоже, сохраняется неповрежденным и выполняется, когда свойство переполнения возвращается к "прокрутке". Это было довольно тривиальное обходное решение, которое работало во всех браузерах, на которых я тестировал (на рабочем столе и на мобильных устройствах). Я не тестировал его исчерпывающе, и я не тестировал переходы на месте, поэтому могут возникнуть побочные эффекты, с которыми я не сталкивался... Ваш пробег может отличаться - но это легко попробовать.
Я нашел ответ здесь http://blog.jonathanargentiero.com/jquery-scrolltop-not-working-on-mobile-devices-iphone-ipad-android-phones/
Мобильные телефоны не понимают $('html,body')
, поэтому вы можете сделать следующее для мобильных устройств
if(navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {
window.scrollTo(0)
} else {
// default `$('html,body')` code for scrolling
}
ИЛИ
просто используйте $('body')
вместо $('html, body')
.
Вы пробовали это?
$("html").scrollTop(0);
Временно устанавливая свойство overflow
на "скрытый", как рекомендовано в ответе @Allan Nienhuis, не работает, например, на Android 4.0.3
(например, на том, что работает Kindle Fire 2s) - когда вы установите overflow
обратно на scroll
, элемент прокручивается назад.
Альтернатива:
Сбросьте свою собственную прокрутку с помощью вспомогательной функции, как показано здесь - пока это просто реализовать, это голые кости в том, что он не дает вам инерциальной прокрутки или прокрутки.
Используйте библиотеку, такую как iScroll, которая реализует собственную сложную прокрутку (инерциальную, перекрестную) на основе преобразований CSS,
Использование iScroll требует немного настройки: вам нужна обертка div
с фиксированной высотой и стилем overflow: hidden
, а элемент для прокрутки должен иметь стиль overflow
. Эта демонстрация jsFiddle показывает, как это делается.
Единственный способ добиться прокрутки вверху страницы на вкладке Galaxy скрывал страницу body
за 100 мс при прокрутке. Использование jQuery:
$("body").hide();
window.scrollTo(0, 0);
setTimeout(function(){ $("body").show() }, 100);
У меня есть несколько решений для вас. Вам придется протестировать их самостоятельно, поскольку я не пробовал их в мобильном браузере раньше, но вот они:
.css()
(или .animate()
в зависимости от вашей конечной цели нас), чтобы скорректировать верхний край (обратите внимание: вам нужно будет изменить переполнение на скрытое и обернуть текст во внутреннем div, что быть элементом, для которого вы настраиваете марку)top
.Сообщите мне, если вам нужна помощь, если у вас есть какие-либо вопросы. Удачи!:)
Обратите внимание: хотя я не тестировал их на мобильных устройствах, прежде чем они основывались на стандартах CSS, а не на функциях jQuery, поэтому они должны работать.
Попробуйте использовать метод jQuery.animate:
$('.div').animate({ scrollTo: x; });
Где x равно положению div, который вы хотите прокрутить до вершины.
jQuery(document).ready(function($) {
$(".scroll").click(function(event){
event.preventDefault();
$('html,body').animate({scrollTop:$(this.hash).offset().top}, 1500);
});
});
<a href="#top" class="scroll"></a>
Используйте следующий код:
$("body").animate( { scrollTop: 50, }, 800, function(){
$("body").clearQueue();
} );
Вместо того чтобы использовать методы scroll, scrollTo или scrollTop (которые доставляют мне проблемы с мобильными устройствами), я рекомендую установить идентификатор для вашего верхнего элемента DOM (например, #top) и просто использовать:
document.getElementById("top").scrollIntoView();
это работает лучше всего для меня на всех устройствах и браузерах.
Эти решения не работают для меня. Я знаю, что кто-то упоминал мобильное обнаружение, но их подход не работал для меня. Наконец-то меня осенило использовать мобильное обнаружение для предоставления двух разных стилей CSS для каждого случая. Может быть, не идеально, но это точно работает. Временное изменение стилей с помощью js, также предложенное выше, у меня не сработало.
У меня был двухколонный макет с независимой прокруткой div, каждый из которых был настроен на переполнение: прокрутка, а тело должно было быть настроено на переполнение: скрыто. Мне нужно использовать scrollTop на одном из столбцов, и никакие решения не сработали.
Я использовал wp_is_mobile() (функция Wordpress), и если mobile true, overflow: hidden удаляется из тела, а div с overflow: scroll удаляют этот css. Наконец, scrollTop работал на мобильном телефоне.
У меня была такая же проблема, и я решил ее использовать с помощью jquery .offset()
.
$('#yourFineElement').offset({ top: X, left Y)});