2012-04-23 11 views
9

tôi đang làm việc trên một thiết kế trang di chuyển và tôi đã sau Javascript để ẩn và hiển thị một hộp thoại:pageYOffset cuộn và Animation trong IE8

 if(window.pageYOffset >= 300){ 

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

    } 

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

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

    } 

này hoạt động tuyệt vời trong Chrome, FF, IE9 +

Tuy nhiên, trong IE8,7 nó chỉ là loại công trình. Nó cho thấy và ẩn phần tử đúng cách nhưng độ trễ giữa khi nó đánh giá vị trí cuộn và khi nó ẩn phần tử là khủng khiếp. Ngoài ra, không có phai, nó chỉ xảy ra.

Tôi tự hỏi nếu nó chỉ là một vấn đề với IE8 mà tôi cần phải giải quyết hoặc nếu có một cách để tôi đạt được một phản ứng mờ dần, sạch sẽ với IE8.

+0

Tiêu đề của câu hỏi này đang tìm kiếm "Thay thế jQuery" nhưng phần không tương thích với IE8 ('pageYOffset') không liên quan gì đến jQuery. – Sparky

+0

Đã sửa lỗi. Khi tôi đăng nó, nó có vẻ giống như một vấn đề jQuery. –

Trả lời

26

pageYOffsetpageXOffset không được hỗ trợ trong IE8 và trước khi, hãy thử chức năng này:

// 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 hoạt động tốt để phát hiện vị trí trong IE8. Bạn có nói rằng sự cố làm mờ Jquery là kết quả của trình duyệt không thể phát hiện được độ lệch cuộn đúng cách không? –

+0

Điều đó có vẻ khó xảy ra, vì nó rõ ràng không phát hiện ra nó ... Nó chỉ hoạt động khác với nó. –

+0

Kết hợp mã này và đặt độ mờ để kế thừa mã cố định. Cảm ơn @Raminson. –

2

Bạn cũng có thể sửa chữa nó bằng cách sử này:

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

Vì vậy, bạn có nó

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

Bằng cách này bạn có thể tránh lặp lại mã.