2010-07-29 23 views
1

有沒有一種方法可以在下載自定義css字體資源之後不運行Javascript函數。在下載自定義字體之前不要運行Javascript函數?

我在< pre>中顯示代碼,並使用自定義下載的字體Liberation Mono。 < pre>也使用自定義滾動條。自定義滾動條Javascript(flexcroll)在設置時需要設置一個靜態寬度。但是直到Liberation Mono字體下載後我才知道寬度。

的CSS加載字體低於(完整的表情符號臉語法):

@font-face { 
    font-family: 'LiberationMonoRegular'; 
    src: url('liberationmono-regular.eot'); 
    src: local('☺'), 
    url('liberationmono-regular.woff') format('woff'), 
    url('liberationmono-regular.ttf') format('truetype'), 
    url('liberationmono-regular.svg#webfontkIKtf5pm') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

JavaScript函數我想要做的是類似於下面的東西。我走在黑暗中拍攝,真的不認爲這是可能的..

$(function() { 
    waitForFontExists('LiberationMonoRegular', function() { 
     <do something> 
    }); 
}); 

回答

3

的谷歌WebFont Loader項目允許您使用各種Web字體提供商合作,並公開回調包括fontloadingfontactive。這可能會有所幫助,具體取決於您對字體源的靈活性。我沒有用它,但該文檔狀態:

除了谷歌和typekit 選項,還有一個自定義模塊 可以加載任何 網頁字體提供一個樣式表。

除此之外,還有很多hackier things to try - 就像檢查目標字體中示例呈現的寬度。

+0

這很有意思。我不知道這個包。我想知道如果我可以將自己的服務器設置爲Web字體提供程序,或者如果我想進入更復雜的服務器。感謝提示,這就是爲什麼StackOverflow真棒! – PKKid 2010-07-29 17:33:26

2

您可以簡單地通過異步XMLHTTPRequest加載字體文件。當文件被加載時,你的請求對象將提交一個準備好的事件。這聽起來效率很低,但是如果你的字體文件被緩存了,它應該只會產生一個額外的HTTP請求和一個304響應。主要的缺點是你不能真正知道瀏覽器支持哪些字體格式,而不用瀏覽器嗅探(據我所知)。即使用戶在本地安裝了字體,也最終會下載字體。

xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", "/path/to/font.ttf",true); 
xmlhttp.onreadystatechange=function() { 
    if (xmlhttp.readyState==4) { 
    alert("font loaded"); 
    } 
} 
xmlhttp.send(null) 
相關問題