2

如果以下代码有效(当然可以)

$( 'html, body' ).animate(
    {
        "scrollTop": "500"
    }, 
    500
);

那么为什么下面的代码不起作用?

$( window ).animate(
    {
        "scrollTop": "500"
    }, 
    500
);

如果以下代码有效

$( window ).scroll( myScrollFunctionHandler );

那么为什么下面的代码不起作用?

$( 'html, body' ).scroll( myScrollFunctionHandler );

有人可以对为什么必须这样做一个全面的解释吗?

4

2 回答 2

4

window没有 scrollTop 属性,这就是您的第一个示例不起作用的原因。document.body做。

至于您的第二个示例,$(window).scrollwindow.onscroll的事件处理程序安装程序。没有“body onscroll”事件,因此显然不会调用安装在 body(或 html)元素上的事件处理程序,因为事件不会在 DOM 中冒泡,而只会向上冒泡。

于 2012-10-15T08:34:06.903 回答
2

这应该是由于$(window).animate(). 实验结果表明,在这个 jQuery animate() 代码中,$(window).scrollTop()总是返回零并且$(window).scrollTop(value)不能正确设置值。

但是,这些工作animate()在其步骤回调函数之前和之中。因此,下面的代码可以正常工作。

function scrollNow(final_val){
    var initial_val = $(window).scrollTop(),
        diff = final_val - initial_val
    ;
    $(window).animate(
        {
            scrollTop: diff,
        },
        {
            duration: 1000,
            step: function(now, fx){
               $(window).scrollTop(initial_val + now);
            }
        }
    );
}
于 2017-02-06T16:59:54.390 回答