如何用 javascript 绘制类似卡拉 OK 的文字?
How to draw karaoke-like text with javascript?
我想用 javascript 显示一些文本并像卡拉 OK 一样突出显示它 - 即一段时间后,要突出显示其他符号。如果我想让它足够平滑(即部分突出显示一个符号),我应该做什么以及如何做?我应该使用 HTML5 canvas 吗?不知道从什么开始。
这是使用通过符号转换的渐变的一种方法:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var gradient=ctx.createLinearGradient(0,0,30,0);
gradient.addColorStop(0.00,'blue');
gradient.addColorStop(0.50,'red');
gradient.addColorStop(1.00,'blue');
ctx.font='36px verdana';
ctx.fillStyle=gradient;
var text='Sing along with Mitch';
var offset=0;
var offsetChange=1;
var textWidth=100;
var textWidth=ctx.measureText(text).width;
var nextTime=0;
var delay=16*3;
requestAnimationFrame(animate);
function animate(time){
if(offset<textWidth){requestAnimationFrame(animate);}
if(time<nextTime){return;}
ctx.fillStyle='black';
ctx.fillRect(0,0,cw,ch);
ctx.fillStyle=gradient;
ctx.translate(offset,0);
ctx.fillText(text,-offset,50);
ctx.translate(-offset,0);
offset+=offsetChange;
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=500 height=200></canvas>
我想用 javascript 显示一些文本并像卡拉 OK 一样突出显示它 - 即一段时间后,要突出显示其他符号。如果我想让它足够平滑(即部分突出显示一个符号),我应该做什么以及如何做?我应该使用 HTML5 canvas 吗?不知道从什么开始。
这是使用通过符号转换的渐变的一种方法:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var gradient=ctx.createLinearGradient(0,0,30,0);
gradient.addColorStop(0.00,'blue');
gradient.addColorStop(0.50,'red');
gradient.addColorStop(1.00,'blue');
ctx.font='36px verdana';
ctx.fillStyle=gradient;
var text='Sing along with Mitch';
var offset=0;
var offsetChange=1;
var textWidth=100;
var textWidth=ctx.measureText(text).width;
var nextTime=0;
var delay=16*3;
requestAnimationFrame(animate);
function animate(time){
if(offset<textWidth){requestAnimationFrame(animate);}
if(time<nextTime){return;}
ctx.fillStyle='black';
ctx.fillRect(0,0,cw,ch);
ctx.fillStyle=gradient;
ctx.translate(offset,0);
ctx.fillText(text,-offset,50);
ctx.translate(-offset,0);
offset+=offsetChange;
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<canvas id="canvas" width=500 height=200></canvas>