题
如何制作这样的图标动画?
它似乎只在 Firefox 中工作。
解决方案
虽然它目前只有Firefox支持其他浏览器将有望支持它的未来。为了达到效果,你需要将GIF上传到服务器,然后将下面一行添加到您的网页的head
部分:
<link rel="icon" href="animated_favicon.gif" type="image/gif" >
看看 AnimatedFavIcon.com 更多的帮助和资源。
其他提示
几乎可以肯定你要找的不是,但到目前为止,以编程写入图标在客户端的JavaScript有些人已经走了。以下网址显示旧视频游戏“后卫”在图标播放:
http://www.p01.org/defender_of_the_favicon/
这在Firefox,Opera和Safari,但不是至少在旧版本的IE。我不知道有什么最新的IE也许有能力。
做一个“视图源”这个页面上使一个非常有趣的读取。
Firefox
Firefox支持的动画图标.只是添加一个链接到GIF在 <link rel="icon">
标签:
<link rel="icon" href="/favicon.gif">
你也可以利用动画ICO文件。在这种情况下浏览器,不支持的动画图标将显示只有第一框架。
其他的浏览器
在其他浏览器你可以画一个图标使用JavaScript。你只需要提取单一的框架,从GIF和变化 <link rel="favicon">
src每次GIF框架的变化。看看这个代码例如(JS小提琴演示):
var $parent = document.createElement("div")
$gif = document.createElement("img")
,$favicon = document.createElement("link")
// Required for CORS
$gif.crossOrigin = "anonymous"
$gif.src = "https://i.imgur.com/v0oxdQ8.gif"
$favicon.rel = "icon"
// JS Fiddle always displays the result in an <iframe>,
// so we have to add the favicon to the parent window
window.parent.document.head.appendChild($favicon)
// libgif.js requires the GIF <img> tag to have a parent
$parent.appendChild($gif)
var supergif = new SuperGif({gif: $gif})
,$canvas
supergif.load(()=> {
$canvas = supergif.get_canvas()
updateFavicon()
})
function updateFavicon() {
$favicon.href = $canvas.toDataURL()
window.requestAnimationFrame(updateFavicon)
}
我用 libgif.js 提取GIF框架。
不幸的是,动画是不是很顺利。在火狐它的伟大工程,但Firefox已经支持GIF图标.
检查还 favico.js 图书馆。
也参看
有回购协议 GitHub 演示如何做到这一点。
http://lab.ejci.net/favico.js/example-simple/
本质上,他们在画布上画画,然后做 canvas.toDataURL('image/png')
然后设置 <link>
href 到该数据 URL。
我已经创建了一个 库动画图标, 默认的是装载机动画(这是产生通过画布上的),但它也支持gif动画浏览器,不支持gif开箱(从版本0.3.0).
API是简单
favloader.init({
color: 'red'
});
favloader.start();
favloader.stop();
0.4.0版本开始,将有回拨功能,将产生一个框架是这样的:
favloader.init({
frame: function(ctx /* canvas context 2D */) {
}
});
和用户将能够吸引单一的框架
注: 要考虑的事情如果要实现这样的事情:
- 动画时,标签不是活动使用网络工作人员,
- 不用requestAnimationFrame,因为它停止执行在MacOSX/铬甚至在网工作人员。
动画的图标为几乎所有的浏览器,以下工作对我来说:
下载的图像,每帧的gif。
链接的第一图像作为一个图标id:
<link rel="icon" type="image/png" href="/image1.png" id="icon"/>
创建一种功能的循环,并使用
setTimeout()
为每个图像。时代变量,并可以被设定为不过快,你会喜欢的画。这里有一个例子:function iconChange() { setTimeout(function(){ document.getElementById("icon").href = "/image1.png";}, 333); setTimeout(function(){ document.getElementById("icon").href = "/image2.png";}, 667); setTimeout(function(){ document.getElementById("icon").href = "/image.png";}, 1000); }
创建一个循环的时候窗载荷:
window.onload = function() { setInterval(function() { iconChange(); }, 250); };
这种方法仅有助于确保更多的浏览器就可以看动画,因为其他方法只在某些浏览器和浏览器的版本。