2012-10-15 159 views
2

如果下面的代码工作(这当然不会)

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

那么为什么不将下面的代码工作?

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

如果下面的代码工作

$(window).scroll(myScrollFunctionHandler); 

那么为什么不将下面的代码工作?

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

请问有人能为此做出全面的解释吗?

回答

4

window没有scrollTop属性,这就是为什么你的第一个例子不起作用。 document.body呢。

至于你的第二个例子,$(window).scrollwindow.onscroll的事件处理程序安装程序。没有“body onscroll”事件,因此很明显安装在body(或html)元素上的事件处理程序不会被调用,因为事件不会使DOM向下滚动,而只会触发事件。

+0

你是什么意思,这不是标准?不,它接受一个回调函数,当所选对象滚动时将使用该函数。 – supertonsky

+0

我错了$ .scroll--这是一个滚动处理程序,而不是一个滚动功能(像scrollTo,我很困惑它)。导致差异的原因是onscroll事件在窗口对象上触发,而不是在body元素上触发。 –

1

这应该是由于$(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); 
      } 
     } 
    ); 
} 
相关问题