如何动画 chrome 和 ie favicon(加载指示器)
how to animate chrome and ie favicon (a loading indicator)
我的 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);
}
以上是我的代码,但 favicon 仅在 Firefox 中动画。
问题是,您需要先删除现有的 favicon
。
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();
您可能想尝试一下 favico.js。它允许您使用视频作为图标。好吧,这对于一个简单的 GIF 来说有点重,但你明白了。另外,您可能可以通过查看代码获得有趣的(和多平台的)部分。
我用了另一个 favicon.js。我用8个静态图标来模拟一个加载动画图标。
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);
这适用于 Google Chrome:
说明:Google Chrome 不支持动画 Favicons。我提供此代码作为使用第三方库的替代方法。为了避免连续的服务器轮询,我建议使用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);
我的 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);
}
以上是我的代码,但 favicon 仅在 Firefox 中动画。
问题是,您需要先删除现有的 favicon
。
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();
您可能想尝试一下 favico.js。它允许您使用视频作为图标。好吧,这对于一个简单的 GIF 来说有点重,但你明白了。另外,您可能可以通过查看代码获得有趣的(和多平台的)部分。
我用了另一个 favicon.js。我用8个静态图标来模拟一个加载动画图标。
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);
这适用于 Google Chrome:
说明:Google Chrome 不支持动画 Favicons。我提供此代码作为使用第三方库的替代方法。为了避免连续的服务器轮询,我建议使用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);