scrollTop() возвращает 0 в Firefox, но не в Chrome

Не уверен, есть ли другой вопрос по этому поводу, если да, то я извиняюсь и, пожалуйста, не отпускайте гончих.

Используя тип документа html5 и выполняя быстрый console.log из моего прослушивателя прокрутки, который сообщает мне значение значения scrollTop(). Я в основном делаю это, поэтому, когда я прокручиваю точку, я меняю непрозрачность элемента. Я делаю это с помощью решения MVS, и у меня нет возможности отправить это на внешний сайт, чтобы вы могли посмотреть. Вот краткий фрагмент:

var opacity = 1;
var scrollTop = $('body').scrollTop();
if (scrollTop > 200) {
   opacity = 0.1;
}
$('#element).css('opacity', opacity);

Если я прокручиваю в Chrome, я получаю console.log(scrollTop); отображая то, что я хочу (т.е. 100 для каждой прокрутки, которую я делаю), и моя непрозрачность исчезает после того, как я нажму 200 scrollTop. Если я прокручиваю в FF и IE7+, var возвращает «0» при каждой прокрутке. Если я изменю $('body').scrollTop() на $('document').scrollTop(); затем я получаю «нулевой» возврат при прокрутке.

Есть идеи? Спасибо!


person lxndr    schedule 17.10.2012    source источник
comment
$('document') должно быть $(document), хотя не знаю, как это повлияет на ваш вопрос.   -  person Kevin B    schedule 17.10.2012


Ответы (4)


Попробуйте использовать var scrollTop = $(document).scrollTop();

person jovobe    schedule 17.10.2012

$(window).scrollTop() работает как положено как в Firefox, так и в Chrome.

Для проверки запустите следующий jsfiddle в Chrome и Firefox: http://jsfiddle.net/RBBw5/6/.

person Rango    schedule 17.10.2012
comment
на самом деле это правильный ответ. $(document).scrollTop(), как правило, не работает в зависимости от размера тела или других внешних поведений. - person Ben; 05.05.2014

После некоторого разочарования в IE9 в режиме причуд я обнаружил, что $('body').scrollTop() надежно работает в IE9, Chrome 32 и Firefox 26.

person Boaz - CorporateShillExchange    schedule 02.02.2014

Использовать var scrollTop = $('html').scrollTop(); работает для FireFox

Однако вам нужно будет пронюхать браузер (я знаю, обнаружить функцию, а не обнюхать, но вы не можете обнаружить это), потому что это не будет работать в Chrome, попробуйте здесь:

Самая простая/легкая замена для обнаружения браузера jQuery 1.9?

person Matt Robinson    schedule 17.10.2013