jquery scrollTop (x) не прокручивается до цели, когда x большой - PullRequest
0 голосов
/ 21 ноября 2011

У меня проблема с .scrollTop ()

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

Мой код JS прост:

console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop())); 
$(window).scrollTop(scrollto);
console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop()));

Результат в моем браузереconsole:

=> 2500 0
=> 2500 2500

Хорошо, моя страница прокручивается с точностью до последней позиции.

Проблема связана с большими значениями переменной scrollto.Вот что у меня в консоли:

=> 12352 0
=> 12352 7683

Не понимаю, почему оно не прокручивается в запрошенной позиции

Я даже пробовал это:

var max_times= 10;

for(var i=0;i<max_times;i++){
console.log('=>'+parseInt(scrollto)+' '+parseInt($(window).scrollTop()));
if (parseInt(scrollto) > parseInt($(window).scrollTop())) 
    $(window).scrollTop(scrollto);
}

И результат:

=> 13450 0
=> 13450 7985
=> 13450 7985
=> 13450 7985
...
=> 13450 7985

Другая информация:

  • У меня такой же результат на Chrome и Safari.
  • Страница, которую яВ разговоре содержится много изображений, поэтому для полной загрузки требуется некоторое время.

Буду очень признателен за любую помощь.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011

Хорошо.

Я нашел решение, которое работает.

Спасибо за ваши подсказки, ребята, общая высота страницы должна быть задействована.

ЧтоЯ сделал следующее:

var timer = setInterval(function(){
    if ((parseInt(scrollto) > parseInt($(window).scrollTop())) && (parseInt($(document).height())>parseInt(scrollto))){
       $(window).scrollTop(scrollto);
       if ($(window).scrollTop()>=scrollto)
           clearInterval(timer);    
    }
},500);

setTimeout(function(){clearInterval(timer);},10000);

Я установил интервал, который проверяет, достаточно ли общей высоты страницы для прокрутки до требуемой позиции каждые 500 мс.Если это так, то прокручивается.Если позиция в порядке, то мы очищаем интервал.

Если ничего из этого не работает, интервал очищается через 10 с.

Еще раз спасибо за помощь в этом!

0 голосов
/ 21 ноября 2011

@ lalibi имеет смысл спросить, есть ли у изображений установленная высота, если вы просите прокрутить до 13450, но в настоящее время высота страницы меньше 13450px, значит, что-то работает неправильно.Если вы попытаетесь установить тайм-аут на scrollTop, когда все изображения загрузятся, это все равно не получится?Если вы заметите, что это не так, то вам придется либо загрузить изображения таким образом, чтобы после загрузки все выполнялось, затем выполнить scrollTop или установить высоту изображений, чтобы страница точно знала, какой она высоты.

...