html - 我可以在 HTML5 Canvas 中使用字 rune 本颜色吗?

标签 html canvas

在 HTML Canvas 中,我可以使用 ctx.fillStyle = 'red' 设置一行文本的颜色,这很棒。我想做的是能够按字母设置颜色,而只需绘制一次单词。

那么如果文本是“你好,不同的颜色!”,有没有办法让字母 H 变成红色,而文本的其余部分变成白色?

最佳答案

我向您展示了这个解决方法。基本上,您一次输出一个字符的文本,并使用内置的 measureText() 函数来确定每个字母的宽度,就好像它是被绘制的一样。然后我们将我们想要绘制的位置偏移相同的量。您可以修改此代码段,以产生您想要的效果。

假设我们有这样的 HTML:

<canvas id="canvas" width="300" height="300"/>

Javascript 是这样的:

var canvas = document.getElementById("canvas");  
var ctx = canvas.getContext("2d");  

function randomColor(){
    var r = Math.floor(Math.random()*256);
    var g = Math.floor(Math.random()*256);
    var b = Math.floor(Math.random()*256);
    return "rgb("+ r + "," + g + "," + b +")";
}

function texter(str, x, y){
    for(var i = 0; i <= str.length; ++i){
        var ch = str.charAt(i);
        ctx.fillStyle = randomColor();
        ctx.fillText(ch, x, y);
        x += ctx.measureText(ch).width;
    }
}

texter("What's up?", 10, 30);

我们会得到一个输出:Sample output

实际查看 at jFiddle .我使用的是最新的 Chrome。

关于html - 我可以在 HTML5 Canvas 中使用字 rune 本颜色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665342/

相关文章:

javascript - 如何在html5 Canvas 中制作可点击的点?

css - Ionic TextAreas 变得太大

html - CSS:带有折叠标题功能区的侧边栏

html - 使 HTML 表格足够宽以适应内容

javascript - 限制 Three.js 中的帧速率以提高性能,requestAnimationFrame?

javascript - 使用 Canvas 的 id 调整大小?

javascript - 使脚本加载速度快于 html 内容

javascript - 为什么 context.clearRect() 在 requestAnimationFrame 循环中不起作用?

javascript - 在警报框中调用变量

html - 如果文本太长,则向输入添加额外的行