2011-11-01 70 views
0

參考,當是此頁: http://demo.mypreviewbetasite.com/laverona/menu.html獲取在IE8當前頁面位置滾動

文件的問題:http://demo.mypreviewbetasite.com/laverona/scripts/menu.js

頁面將按預期在Firefox和Chrome,在那裏當用戶滾動,位置該窗口將根據我的子菜單的位置進行檢查,以便在它滾動出視圖之前將其位置設置爲固定。

但是,在IE8中,隨着用戶滾動,窗口位置永遠不會更新。我的測試顯示IE可以通過所有的功能,但只在頁面加載時更新windowPos變量。

可以做些什麼以使此頁在IE和FF和Chrome中的行爲相同?

回答

0

這是來自jquery文檔: 「.offset()方法允許我們檢索元素相對於文檔的當前位置。」 我不明白爲什麼FF或Chrome返回$('html')。offset()。頂部相對於客戶端屏幕/看來IE的方法更具可預測性。

試一下(使用DOM元素的.scrollTop屬性,而不是.offset()頂部。):

$(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; 
    } 

}); 
+0

因此,** ** **適用於IE和FF,但不適用於Chrome。我使用了一個if/else來使用chrome來使用之前做過的工作,但它計算窗口位置的方式不同,所以這是一個全新的蠕蟲罐。 謝謝雖然,這有助於:) – andyjv

+0

我現在看到的唯一解決方法是檢查滾動事件處理程序。「body」或「html」的.scrollTop屬性是否已更改並分配給windowPos相應的值。我將編輯我的答案來演示 – user907860