2012-10-08 3 views
52

Я просто пытаюсь что-то сделать, как только положение прокрутки страницы достигнет определенной высоты. Однако scrollTop() возвращает 0 или null независимо от того, как далеко вниз я прокручиваю. Это функция помощи я использую, чтобы проверить значение scrollTop():

$('body').click(function(){ 
    var scrollPost = $(document).scrollTop(); 
    alert(scrollPost); 
}); 

Я попытался прикрепление scrollTop() к $('body'), $('html') и конечно $(window), но ничего не меняется.

Любые идеи?

+2

Не ответ, но примечание стороны ... Я обычно использую путевые точки JQuery плагин для подобных вещей. http://getkickstrap.com/apps/waypoints-987090/ –

+1

Я действительно не хочу использовать скрипт для замены чрезвычайно простой функции javascript. – jetlej

+4

Ваш код работает для меня: http://jsfiddle.net/ZA7Uj/ –

ответ

99

По какой-то причине удаление «height: 100%» из моих тегов html и body устраняет эту проблему.

Я надеюсь, что это поможет кому-то еще!

+1

Простым решением этой проблемы является установка max-height на body и html вместо высоты. – jwaern

+0

Это связано с ошибкой в ​​Chrome, которая должна быть исправлена ​​очень скоро: https://code.google.com/p/chromium/issues/detail?id=157855 –

+5

Для тех из нас, кто не использует jQuery, моя рекомендация вместо этого следует использовать 'window.scrollY'. –

5

У меня есть надстройка для тех, кто может совершить ту же ошибку, что и я. Мой код был как следует:

var p = $('html,body'); 
$(".info").text("scrollTop:" + p.scrollTop()); 

Этот код будет работать на всех браузер для webkits браузера, за исключением таких, как хром и сафари, потому что <html> тег всегда имеет значение scrollTop ноль или нуль.

Другие браузеры игнорируют его, в то время как браузеры webkit этого не делают.

Простейшим solutution просто удалить HTML тег из вашего кода и вуаля:

var p = $('body'); 
$(".info").text("scrollTop:" + p.scrollTop()); 
2

была та же проблема. scrollTop() работает с некоторым блоком, а не документом или телом. Для того, чтобы этот метод работы и должны добавить высоту и стиль переполнения для блока:

#scrollParag { 
    height: 500px; 
    overflow-y: auto; 
} 

И потом:

var scrolParag = document.getElementById('scrollParag'); 
alert(scrolParag.scrollTop); // works! 
3

Мое решение, после попытки некоторых из указанных выше и которые не связаны с изменением любой CSS:

var scroll_top = Math.max($("html").scrollTop(), $("body").scrollTop()) 

Это работает в современных версиях Chrome, Firefox, IE и Edge.

0

Кстати, мне кажется, что вы должны использовать

$("body").scrollTop() 

вместо

$(".some-class").scrollTop 

Вот почему я застрял.

0

Scroll Top всегда возвращался 0 для меня. Я использовал его для привлечения внимания к конкретному элементу на странице. Я использовал другой подход.

document.getElementById ("elementID"). ScrollIntoView();

Хорошо работает для меня на мобильных телефонах, планшетах и ​​на рабочем столе.

25

У меня были таким же проблема с свитком = 0 в:

document.body.scrollTop 

В следующий раз используйте

document.scrollingElement.scrollTop 

Edit 20.10.2017:

Всегда есть 'но', IE поддержка 11 оленьей кожи scrollingElement поэтому используют

document.documentElement.scrollTop 
1

Удаление height: 100%; из тегов html и body может решить проблему.

Причина:

Причина заключается в том, что вы могли бы установить 100% в качестве значения высоты собственности из HTML и тела элементов. Если вы устанавливаете свойство height html и элементов тела на 100%, они получают высоту, равную высоте документа.

Смотреть это: http://www.mentfri.com/2017/11/jquery-scrolltop-returns-0/

+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – LW001