我正在嘗試使用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