如何为 chrome 和 ie favicon(加载指示器)设置动画

new*_*bie 5 javascript favicon google-chrome

我的 PM 有一个要求,将图标更改为动画加载图像。仅当我简单地将 link.href 指向 gif 文件时,它才适用于 Firefox。

我做了一些研究,发现 chrome 不支持动画图标。但wiki说 chrome 4.0 支持动画 GIF。

function changeFavicon() {
  var link = document.createElement('link');
  link.type = 'image/x-icon';
  link.rel = 'shortcut icon';
  link.href = 'http://uploads.neatorama.com/vosa/theme/neatobambino/media/loading.gif';
  document.getElementsByTagName('head')[0].appendChild(link);
}
Run Code Online (Sandbox Code Playgroud)

上面是我的代码,但 favicon 只在 Firefox 中动画。

Rob*_*ada 5

这适用于谷歌浏览器:

说明:Google Chrome 不支持动画图标。我提供此代码作为使用第三方库的替代方法。为了避免连续的服务器轮询,我建议使用 Base64 编码的帧。

仅供参考:您可以使用包含 Base64 编码图标的数组并循环遍历元素,而不是使用 switch 语句,但我只是更喜欢这种方式。

重要提示:同样需要了解的是,使用 Base64 编码图像的原因是为了避免对每个帧向服务器发出连续请求。

document.head = document.head || document.getElementsByTagName('head')[0];
function changeFavicon(src) {
    var link = document.createElement('link'), oldLink = document.getElementById('dynamic-favicon');
    link.id = 'dynamic-favicon';
    link.rel = 'shortcut icon';
    link.href = src;
    if (oldLink) {
        document.head.removeChild(oldLink);
    }
    document.head.appendChild(link);
    }
function animate(){
    if ( typeof animate.i == 'undefined' ) {
        animate.i = 0;
    }
    switch(animate.i) {
        case 0:
            changeFavicon("[PUT BASE64 for ICO FRAME 1 HERE]");
            break;
        case 1:
            changeFavicon("[PUT BASE64 for ICO FRAME 2 HERE]");
            break;
        case 2:
            changeFavicon("[PUT BASE64 for ICO FRAME 3 HERE]");
            break;
        case 3:
            changeFavicon("[PUT BASE64 for ICO FRAME 4 HERE]");
            break;
        case 4:
            changeFavicon("[PUT BASE64 for ICO FRAME 5 HERE]");
            break;
        case 5:
            changeFavicon("[PUT BASE64 for ICO FRAME 6 HERE]");
            break;
        case 6:
            changeFavicon("[PUT BASE64 for ICO FRAME 7 HERE]");
            break;
        case 7:
            changeFavicon("[PUT BASE64 for ICO FRAME 8 HERE]");
            break;
        case 8:
            changeFavicon("[PUT BASE64 for ICO FRAME 9 HERE]");
            break;
        case 9:
            changeFavicon("[PUT BASE64 for ICO FRAME 10 HERE]");
            break;
        case 10:
            changeFavicon("[PUT BASE64 for ICO FRAME 11 HERE]");
            break;
        case 11:
            changeFavicon("[PUT BASE64 for ICO FRAME 12 HERE]");
            break;
        case 12:
            changeFavicon("[PUT BASE64 for ICO FRAME 13 HERE]");
            break;
        case 13:
            changeFavicon("[PUT BASE64 for ICO FRAME 14 HERE]");
            break;
        case 14:
            changeFavicon("[PUT BASE64 for ICO FRAME 15 HERE]");
            break;
        case 15:
            changeFavicon("[PUT BASE64 for ICO FRAME 16 HERE]");
            break;
    }
    animate.i = animate.i + 1;
    if(animate.i == 16){
        animate.i = 0;
    }
}
setInterval(animate,250);
Run Code Online (Sandbox Code Playgroud)


phi*_*e_b 2

您可能想尝试一下favico.js。它允许您使用视频作为网站图标。好吧,这对于一个简单的 GIF 来说有点沉重,但你明白了。另外,您可能可以通过查看代码来获得有趣的(和多平台的)部分。