关于jQuery:pageYOffset在IE8中滚动和动画


pageYOffset Scrolling and Animation in IE8

我正在进行滚动页面设计,并且具有以下Javascript隐藏和显示对话框:

1
2
3
4
5
6
7
8
9
10
11
        if(window.pageYOffset >= 300){

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

    }

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

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

    }

这在Chrome,FF,IE9 +中效果很好

但是,在IE8,7中,它只是一种工作方式。 它可以正确显示和隐藏元素,但是在评估滚动位置和隐藏元素之间的延迟是可怕的。 同样,没有褪色,它只是发生。

我想知道这只是我需要处理的IE8问题,还是我有办法用IE8实现反应性的,干净的淡入淡出。


IE8和更低版本不支持pageYOffsetpageXOffset,请尝试以下功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 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
    };
}


您也可以使用以下方法修复它:

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

所以你有

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

这样,您可以避免重复代码。