Получение текущей позиции страницы в IE8 при прокрутке - PullRequest
0 голосов
/ 01 ноября 2011

Ссылка на эту страницу: http://demo.mypreviewbetasite.com/laverona/menu.html

Файл, о котором идет речь: http://demo.mypreviewbetasite.com/laverona/scripts/menu.js

Страница работает так, как ожидается в Firefox и Chrome, где пользователь прокручивает положение позиции.Окно проверяется на соответствие позиции моего подменю, поэтому до того, как оно прокручивается вне поля зрения, его положение устанавливается на фиксированное значение.

Однако в IE8 позиция окна никогда не обновляется при прокрутке пользователя.,Мои тесты показали, что IE выполняет все функции, но обновляет переменную windowPos только при загрузке страницы.

Что можно сделать, чтобы эта страница в IE работала так же, как в FF и Chrome?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2013

Я знаю, что это старый, но для новых людей, приходящих на этот вопрос, вы можете проверить ответ Энди на похожий вопрос (который также, кажется, решает этот): https://stackoverflow.com/a/11396681/1793128

0 голосов
/ 02 ноября 2011

это из документации jquery: «Метод .offset () позволяет нам получить текущую позицию элемента ОТНОСИТЕЛЬНО ДОКУМЕНТА».Я не могу понять, почему FF или Chrome возвращают $ ('html'). Offset (). Top относительно экрана клиента. Кажется, что подход IE более предсказуем.

Попробуйте (используйте свойство .scrollTopэлемента DOM вместо .offset (). top):

$(document).ready(function(e){
    //alert("subPos: " + subPos);

    //first find the position of the things to sticky
    submenu = $("#sub");
    //submenu.removeClass("no-js");
    subPos = $("#sub").position();
    subPos = subPos.top;

    var preScrollHtml = document.getElementsByTagName('html').item(0).scrollTop;
    var preScrollBody = document.getElementsByTagName('body').item(0).scrollTop;

    var checkPos = function(){
    var scrolledHtml = document.getElementsByTagName('html').item(0).scrollTop;
    var scrolledBody = document.getElementsByTagName('body').item(0).scrollTop;
    if (preScrollHtml !== scrolledHtml) {
    windowPos = scrolledHtml;
    }
    else {
    windowPos = scrolledBody;
        }
    preScrollHtml = scrolledHtml;
        preScrollBody = scrolledBody;
    calculate();
    }

    var calculate = function() {
    subPos = 64;
    if (windowPos >= subPos){
    $("#sub").addClass("fixed");
    $("#minestre").css("marginTop", "50px");
    }
    else if (windowPos < subPos){
    $("#sub").removeClass("fixed");
    $("#minestre").css("marginTop", "0px");
    }
    //Setting text fields to show the values of everything can help in debugging
    $("#windowpos").val(windowPos);
    $("#subp").val(subPos);
    }




//every time the window scrolls, this function is run
    if ($(window).scroll){
        $(window).scroll(checkPos);
    }
    else if(window.onscroll){
        window.onscroll = checkPos;
    }

});
...