JQuery scrollTop() возвращает 0 для всех элементов
На моей работе у нас есть сайт с одной страницей, который я создал с помощью AngularJS.
Мы используем плагин ui-router (версия 0.2.0).
Недавно я заметил, что при переходе из одного состояния в другое окно не прокручивается вверх.
Я даже попытался прокрутить его вверх, используя функцию jQuery scrollTop()
при каждом изменении состояния (используя событие $stateChangeSuccess
). Но это не сработало.
Итак, я начал расследование, и я заметил, что scrollTop()
возвращает 0 для каждого элемента на странице.
Не только это, но когда я печатаю window.scrollY
на консоли, я получаю 0 (независимо от того, где я нахожусь на странице). Не только в моем коде, но даже если я просто напишу его в консоли хром-инструментов.
Я написал несколько приложений с AngularJS и ui-router, и это происходит только в этом конкретном.
Я проверил, не перезаписал ли я функцию scrollTop()
или даже поле window.scrollY
, но ничего не нашел.
Я пробовал использовать ui-view
с autoscroll="true"
и autoscroll="false"
, но это не помогло.
Я также попытался предоставить элементы html
и body
height:100%
, и я также попробовал это без него. Но ничего.
Я действительно не знаю, что делать дальше.
Я не смог воспроизвести проблему, но если вы считаете, что есть какой-либо код, который я должен опубликовать здесь, который может быть полезен, я буду рад сделать это.
Спасибо!
EDIT:
Я запустил эту функцию на консоли:
var l = $('*').length;
for(var i = 0; i < l; i++) {
var elem = $('*:eq(' + i + ')');
if(elem.scrollTop() > 0) {
console.log(elem, elem.scrollTop());
}
}
Функция напечатала только один элемент с его верхней прокруткой.
Элемент - это оберточный div, который содержит весь контент и основной вид (у меня есть вложенные представления в моем приложении).
Если я использую scrollTop(0)
для этого элемента, я получаю то, что хотел, но он касается только симптома, а не реальной проблемы.
Ответы
Ответ 1
Как заметил @Hans, на самом деле проблема не была.
У меня был оберточный элемент, который был помещен absolute
с помощью:
top:0;
bottom:0;
left:0;
right:0;
overflow:auto
Итак, окно scrollTop
всегда было 0, а полоса прокрутки фактически принадлежала оберточному элементу.
Так как я не мог избавиться от позиционирования элемента переноса, я использовал событие ui-router $stateChangeSuccess
и вручную прокрутил элемент переноса вверх.
Ответ 2
На консоли попробуйте
console.log(frames)
console.log(frames.top.scrollY)
Если window.scrollY показывает 0, тогда опорный кадр не должен быть окном. У вас есть iframes на странице? console.log фреймов покажет список фреймов на странице.
Надеюсь, что это поможет.
Ответ 3
Мой код тоже вызывает эту проблему, и я нашел тело {overflow: hidden;} - причина, я удаляю "overflow: hidden"; и все хорошо.