document.body scrollTop возвращает 0 в chrome, но не в firefox

я знаю, что уже есть темы об этой проблеме, но все решения не работали для меня.

я хочу, чтобы мое меню было зафиксировано поверх моей страницы, когда пользователь прокручивает.

Я нашел скрипт и адаптировал его под свои нужды:

var win         = $(document.body);
var fxel        = $('#stickynav');
var eloffset    = $('#stickynav').offset().top;
console.log(win.scrollTop());

win.scroll(function() {

    if (eloffset < win.scrollTop()) {
        console.log('fixed');
        fxel.addClass("fixed");
    } else {
        console.log(eloffset + ' != ' + win.scrollTop());
        fxel.removeClass("fixed");
    }
});

он работает в Firefox и IE8, но не в Chrome, win.scrollTop() всегда возвращает 0.

я пробовал все win = $(document), $(window) и $('body, html') и всегда возвращал 0 или ничего.

Кто-нибудь может мне помочь?


person loubradou    schedule 16.01.2015    source источник
comment
Это должно сработать, не могли бы вы предоставить скрипку?   -  person Hacketo    schedule 16.01.2015
comment
я не могу, потому что это должно работать, вот URL-адрес веб-сайта, если вы хотите взглянуть: littlebastardparis.com   -  person loubradou    schedule 16.01.2015
comment
Эм, есть ли причина, по которой вы не используете position: fixed;...?   -  person    schedule 16.01.2015
comment
когда я прокручиваю, я добавляю фиксированный класс, который содержит position:fixed в мое меню, например: stackoverflow.com/questions/19158559/   -  person loubradou    schedule 16.01.2015


Ответы (1)


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

//window events
$(window).on('scroll', function(){
    that = $(this); 
    if(that.scrollTop()>break_point){
        //YOUR CODE
    }
});

ОБНОВЛЕНИЕ

Я работал над решением вашей проблемы. Прежде всего, попробуйте обновить свой jQuery, если проблема не устранена, попробуйте использовать это: я уже тестировал это на вашей странице, похоже, все работает нормально.

    $(window).on('scroll', function(){
        that = $(this);
        //because you are wrapping all contents
        var offsetTop = Math.abs($('.wrapper-1').offset().top);

        if(offsetTop>break_point){
            //CODE HERE
        }
    });

Честно надеюсь, что это работает. Ваше здоровье

person Gonsalo Sousa    schedule 16.01.2015
comment
Привет, спасибо за ваш ответ, но он тоже не работает :/ - person loubradou; 16.01.2015