使用类似Gmail添加计数的图像处理技术实现动态网站图标

38

我试着查看源代码,但是我无法理解它。

我想知道如何制作类似Gmail的动态收藏夹图标并显示计数。

在此输入图片描述

有什么想法吗?


1
请注意,Chrome的动态网站图标实现存在缺陷,并且使用了过多的CPU资源。请参阅http://code.google.com/p/chromium/issues/detail?id=121333。 - brillout
1个回答

60
你可以使用 canvas 元素创建一张图片,然后将当前的网站图标替换为它。请查看以下链接以获取详细解释。 参考 代码来自上述参考。 标记
<link id="favicon" rel="icon" type="image/png" href="image.png" /> 

JS

  (function () {
    var canvas = document.createElement('canvas'),
        ctx,
        img = document.createElement('img'),
        link = document.getElementById('favicon').cloneNode(true),
        day = (new Date).getDate() + '';
    
    if (canvas.getContext) {
      canvas.height = canvas.width = 16; // set the size
      ctx = canvas.getContext('2d');
      img.onload = function () { // once the image has loaded
        ctx.drawImage(this, 0, 0);
        ctx.font = 'bold 10px "helvetica", sans-serif';
        ctx.fillStyle = '#F0EEDD';
        if (day.length == 1) day = '0' + day;
        ctx.fillText(day, 2, 12);
        link.href = canvas.toDataURL('image/png');
        document.body.appendChild(link);
      };
      img.src = 'image.png';
    }
    
    })();

编辑
必须同时设置一张图片。

2
这段代码做的事情比第一句话中说的要多。实际上,它会在加载后,如果画布上下文可用的情况下,在“image.png”(脚本中给出的模板图像源,而不是<link>中的默认值)上绘制。此外,每次运行函数时(在本例中为一次),它都会向文档的主体添加一个<link>元素(这是非法的:只能在<head>中)。因此,我建议省略cloneNode()appendChild(),仅更新原始链接href。 - handle
document.getElementById('favicon').href = canvas.toDataURL('image/png'); - manthrax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接