使用类似于Gmail添加计数的图像处理的动态图标

San*_*ago 37 javascript favicon canvas dynamic

我试着弄清楚看源代码,但我无法理解.

我想知道如何使用Gmail这样的计数制作动态图标.

在此输入图像描述

有关如何做到这一点的任何想法?

Lok*_*tar 59

您可以使用canvas元素制作图像,然后只需替换当前的图标.请查看以下链接以获得有关它的详细说明. 参考

代码来自上面的参考.

标记

<link id="favicon" rel="icon" type="image/png" href="image.png" /> 
Run Code Online (Sandbox Code Playgroud)

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';
    }

    })();
Run Code Online (Sandbox Code Playgroud)

编辑

必须也有图像集.

  • 此代码比第一句中所述的更多.它实际上是在加载后的"image.png"(脚本中给出的模板图像源,而不是`<link>`中的默认值)上绘制的,如果画布上下文可用的话.此外,它正在向文档正文添加[`<link>`](https://developer.mozilla.org/de/docs/Web/HTML/Element/link)元素(这是非法的:每次运行该函数时(仅限<head>`)(在这种情况下,一次).所以我试着省略`cloneNode()`和`appendChild()`并且只更新原始链接href. (2认同)