2012-04-23 59 views
9

我上滾動網頁設計工作,我有以下的JavaScript來隱藏和顯示一個對話框:pageYOffset滾動和動畫在IE8

 if(window.pageYOffset >= 300){ 

      $('#m1').fadeIn('slow'); 

    } 

    if(document.documentElement.scrollTop >=300){ 

     $('#m1').fadeIn('slow'); 

    } 

這在Chrome,FF,IE9 +

的偉大工程

但是,在IE8,7中它只是一種作品。它正確地顯示和隱藏元素,但是它評估滾動位置和隱藏元素的時間之間的延遲是可怕的。此外,沒有褪色,它只是發生。

我想知道如果它只是與IE8的問題,我需要處理或是否有讓我實現了反應,乾淨的褪色與IE8的方式。

+0

這個問題的標題是尋找一個「另類的jQuery」但是這與IE8不兼容的部分('pageYOffset')無關的jQuery。 – Sparky 2012-04-23 19:00:00

+0

已修復。當我發佈它時,它看起來像一個jQuery問題。 – 2012-04-23 20:27:51

回答

26

pageYOffsetpageXOffset不是在IE8及以前支持,試試這個功能:

// Return the current scrollbar offsets as the x and y properties of an object 
function getScrollOffsets() { 

    // This works for all browsers except IE versions 8 and before 
    if (window.pageXOffset != null) 
     return { 
      x: window.pageXOffset, 
      y: window.pageYOffset 
     }; 

    // For browsers in Standards mode 
    var doc = window.document; 
    if (document.compatMode === "CSS1Compat") { 
     return { 
      x: doc.documentElement.scrollLeft, 
      y: doc.documentElement.scrollTop 
     }; 
    } 

    // For browsers in Quirks mode 
    return { 
     x: doc.body.scrollLeft, 
     y: doc.body.scrollTop 
    }; 
} 
+0

document.documentElement.scrollTop正常工作以檢測IE8中的位置。 你是說jquery淡入淡出問題是瀏覽器無法正確檢測到滾動偏移的結果嗎? – 2012-04-23 18:36:55

+0

這似乎不太可能,因爲它顯然確實檢測到它......它只是表現出不同於它應該的。 – 2012-04-23 18:40:21

+0

此代碼和設置不透明度的組合可以繼承固定它。謝謝@Raminson。 – 2012-04-23 20:32:23

2

您也可以使用修復此:

document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset; 

所以你有它

if((document.body.scrollTop || document.documentElement.scrollTop || window.pageYOffset) >= 300){ 
     $('#m1').fadeIn('slow'); 
} 

用這種方法可以避免複製代碼。