Подтвердить что ты не робот

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) для этого элемента, я получаю то, что хотел, но он касается только симптома, а не реальной проблемы.

4b9b3361

Ответ 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"; и все хорошо.