我正在尝试使用jQuery的.animate
滚动到页面上的元素,然后执行回调。滚动到页面上的元素,然后运行回调
周围搜索后,我发现这个功能:
function scrollToElement(selector, callback){
var animation = {scrollTop: $(selector).offset().top};
$('html,body').animate(animation, 'slow', 'swing', callback);
}
这正确地滚动到由“选择”限定的元件,但回调被调用两次(因为$('html,body')
包含2种元素)。
我试图改变
$('html,body').animate
到:
$(document).animate
和:
$(window).animate
,但那些都做任何事情。
我也试图改变功能,这一点:
$('html').animate(animation, 'slow', 'swing', function(){
$('body').animate(animation, 'slow', 'swing', callback);
});
但是,本作的浏览器中运行的第一个动画,然后第二个,所以我不得不等待所有运行的回调是跑前(我不要那样)。
我发现$('body').scrollTop()
只适用于Chrome,而$('html').scrollTop()
只适用于Firefox。
那么,有没有一种方法(无需下载jQuery插件)让我滚动到Chrome和Firefox中的特定元素(我不关心IE),并执行回调(一次) ?
编辑:
我通过做一个布尔检查,如果回调已经运行了一个原油修补程序,如果是,不要再运行它。
function scrollToElement(selector, callback){
var animation = {scrollTop: $(selector).offset().top};
var callback_running = false;
$('html,body').animate(animation, 'slow', 'swing', function(){
if(typeof callback == 'function' && !callback_running){
callback_running = true;
callback();
}
});
}
我做了一个粗略的修复,检查函数是否已经运行。有没有另一种方法来解决这个问题呢? – 2011-02-16 17:48:31