2013-08-18 16 views
0

我有一段代碼希望在頁面準備就緒後立即跳轉到頁面上的特定ID。我通過執行jquery.animate()來完成此操作,以使scrollTop成爲我的目標元素。Web字體的事件處理程序加載?

但是,我正在使用網絡字體,並且出於某種原因,ready事件正在觸發之前網絡字體已加載並已應用。結果是動畫在與我想要滾動的元素的實際位置完全無關的位置結束。

我已通過在Chrome檢查器中打開時間線來驗證此問題,在該檢查器中,我看到動畫觸發,然後是Web字體加載,然後進行重新呈現,導致我的動畫目標滾動點變得毫無意義。我也證實,當我使用系統字體時,這個問題不會表現出來。

任何人都可以提供一些建議嗎? Web字體應用後可能會發生某種事件?

+1

下面的答案是正確的。另一次你想使用window.load事件是爲圖像。如果您對圖像尺寸進行任何計算,則應等待window.load,否則提供的尺寸可能爲0。 –

回答

1

$(document).ready(...)在瀏覽器完成下載頁面的整個HTML時觸發。它通常在瀏覽器完成下載樣式表之前,更不用說字體文件了。


假設它是從包含在HTML樣式表加載(而不是一個JavaScript添加樣式表),你應該監聽窗口事件,而不是文件的加載事件。

$(window).on('load', function(){ 
    // your resources are loaded 
}); 
1

嘗試使用.load代替,因爲.ready僅在加載DOM後。

$(window).load(function() { 
    // run code 
}); 

這裏是關於爲什麼。就緒()是不是你想要的信息:
http://api.jquery.com/ready/

這裏是信息爲什麼.load()(真正的JavaScript load事件)是你想要什麼(它等待資源被加載):
http://api.jquery.com/load-event/