Javascript 如何在谷歌字体加载时显示正在加载的图像?

Javascript 如何在谷歌字体加载时显示正在加载的图像?,javascript,jquery,Javascript,Jquery,我正在使用谷歌字体api。在document.ready中,我请求了google字体集合,并用所有可用的字体族填充选择列表。现在,当用户从selectlist中选择任何字体时,我只需在文档中添加链接,请求所选字体并显示字体预览。但是我试图在字体加载预览时显示正在加载的图像。我的代码: $("#ff").selectmenu({ select: function () { var img = $("<img />").attr("src", "/images/l

我正在使用谷歌字体api。在document.ready中,我请求了google字体集合,并用所有可用的字体族填充选择列表。现在,当用户从selectlist中选择任何字体时,我只需在文档中添加链接,请求所选字体并显示字体预览。但是我试图在字体加载预览时显示正在加载的图像。我的代码:

    $("#ff").selectmenu({ select: function () {
        var img = $("<img />").attr("src", "/images/load.gif");
        $(".preview").append(img);
        $('body').append("<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=" + escape($(this).val()) + "' type='text/css' media='all' />");
        $(".preview").css({ fontFamily: $(this).val() });
        $(img).remove();
    }
    });

但加载图像未显示,因为链接标记可能正在异步请求字体。在字体完全加载之前,如何显示正在加载的图像?

下面是另一篇文章提供的另一个答案

在我看来,这是一个更好的解决这个问题的方法 使用IMG标记及其onerror事件。这种方法可以完成这项工作 不循环、不扭曲样式或不加载文件 iFrame等。此解决方案在加载文件时正确激发, 讽刺的是,如果文件已经被缓存了,那么马上 比大多数DOM加载事件处理缓存资产的方式更好。这里有一个 在我的博客上发布解释方法的文章-后巷编码器post-I 只是厌倦了没有合法的解决方案,享受吧

var loadCSS = function(url, callback){
var link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    link.href = url;

document.getElementsByTagName('head')[0].appendChild(link);

var img = document.createElement('img');
    img.onerror = function(){
        if(callback) callback(link);
    }
    img.src = url; 
}


请投票支持他的回答,确保他得到信任。

这是另一篇文章提供的另一个答案

在我看来,这是一个更好的解决这个问题的方法 使用IMG标记及其onerror事件。这种方法可以完成这项工作 不循环、不扭曲样式或不加载文件 iFrame等。此解决方案在加载文件时正确激发, 讽刺的是,如果文件已经被缓存了,那么马上 比大多数DOM加载事件处理缓存资产的方式更好。这里有一个 在我的博客上发布解释方法的文章-后巷编码器post-I 只是厌倦了没有合法的解决方案,享受吧

var loadCSS = function(url, callback){
var link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    link.href = url;

document.getElementsByTagName('head')[0].appendChild(link);

var img = document.createElement('img');
    img.onerror = function(){
        if(callback) callback(link);
    }
    img.src = url; 
}

请投票支持他的回答,确保他得到信任