how to animate chrome and ie favicon (a loading indicator)
我的PM要求将图标图标更改为动画加载图像。 如果仅将link.href指向gif文件,则它仅在Firefox中有效。
我进行了一些研究,发现Chrome不支持动画网站图标。
但是维基说chrome 4.0支持动画GIF。
1 2 3 4 5 6 7 | 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); } |
上面是我的代码,但是favicon仅在Firefox中具有动画效果。
这适用于Google Chrome:
说明:Chrome浏览器不支持动画Favicon。我提供了此代码,作为使用第三方库的替代方法。为了避免服务器连续轮询,我建议使用Base64编码的帧。
仅供参考:您可以使用包含Base64编码图标的数组,并在元素之间循环,而不必使用switch语句,但是我只是更喜欢这种方式。
重要说明:同样重要的是,使用Base64编码图像的原因是,这样就不会对服务器的每一帧都发出连续的请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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); |
我使用了另一个favicon.js。我使用了8个静态图标来模拟加载动画图标。
1 2 3 4 5 6 | favicon.animate([ "img/loading1.ico","img/loading2.ico", "img/loading3.ico","img/loading4.ico", "img/loading5.ico","img/loading6.ico", "img/loading7.ico","img/loading8.ico" ], 50); |
您可能想尝试一下favico.js。它使您可以将视频用作收藏夹图标。好的,对于简单的GIF来说有点沉重,但是您明白了。另外,通过查看代码,您可能会得到有趣的(和多平台)部分。
问题是,存在一个现有的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function removeFavicon() { var myHead = document.getElementsByTagName("head")[0]; var lnks = myHead.getElementsByTagName('link'); var len = lnks.length; for (var i = 0; i < len; ++i) { var l = lnks[i]; if (l.type =="image/x-icon" || l.rel =="shortcut icon") { myHead.removeChild(l); return; // Returned assuming only one favicon link tag } } } 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'; removeFavicon(); // remove existing favicon document.getElementsByTagName('head')[0].appendChild(link); } changeFavicon(); |