JSFiddle - React, Tailwind, and code Playground

by Valentin Sarychev

HTML

<canvas width=600></canvas>

JavaScript

var ctx = document.querySelector("canvas").getContext("2d"),
    dashLen = 220, dashOffset = dashLen, speed = 1,
    txt = "STROKE-ON CANVAS", x = 0, i = 0;

ctx.font = "50px Comic Sans MS, cursive, TSCu_Comic, sans-serif"; 
ctx.lineWidth = 6; ctx.lineJoin = "round"; ctx.globalAlpha = 1;

(function loop() {
  ctx.clearRect(x, 0, 60, 150);
  ctx.setLineDash([dashLen - dashOffset, dashOffset - speed]); // create a long dash mask
  dashOffset -= speed;
  ctx.strokeText(txt[i], x, 100);                          // stroke letter

  if (dashOffset) requestAnimationFrame(loop);             // animate
  else {                                                   // prep next char
    dashOffset = dashLen;
    x += ctx.measureText(txt[i++]).width + ctx.lineWidth * Math.random();
    if (i < txt.length) requestAnimationFrame(loop);
  }
})();