Voglio che questa parola sia disegnata con un'animazione, in modo tale che la pagina "scriva" la parola nello stesso modo in cui vorremmo
Versione su tela
Questo attirerà singoli caratteri più come uno scriverà a mano. Utilizza un lungo trattino in cui l'ordine di attivazione / disattivazione viene scambiato nel tempo per carattere. Ha anche un parametro di velocità.
Esempio di animazione (vedere la demo seguente)
Per aumentare il realismo e l'atmosfera organica, ho aggiunto una spaziatura casuale delle lettere, un offset delta y, trasparenza, una rotazione molto sottile e infine usando un carattere già "scritto a mano". Questi possono essere raggruppati come parametri dinamici per fornire una vasta gamma di "stili di scrittura".
Per un aspetto ancora più realistico sarebbero necessari i dati del percorso che non sono predefiniti. Ma questo è un breve ed efficace pezzo di codice che si avvicina al comportamento scritto a mano e facile da implementare.
Come funziona
Definendo uno schema a tratteggio possiamo creare formiche in marcia, linee tratteggiate e così via. Approfittando di questo definendo un punto molto lungo per il punto "off" e aumentando gradualmente il punto "on", si darà l'illusione di tracciare la linea quando viene accarezzato mentre si anima la lunghezza del punto.
Poiché il punto spento è così lungo, il motivo ripetuto non sarà visibile (la lunghezza varierà con la dimensione e le caratteristiche del carattere tipografico in uso). Il percorso della lettera avrà una lunghezza, quindi dobbiamo assicurarci di avere almeno ogni punto ogni punto che copra questa lunghezza.
Per le lettere che consistono in più di un percorso (es. O, R, P ecc.) Come uno è per il contorno, uno è per la parte vuota, le linee appariranno disegnate simultaneamente. Non possiamo fare molto al riguardo con questa tecnica in quanto richiederebbe l'accesso a ciascun segmento di percorso da tracciare separatamente.
Compatibilità
Per i browser che non supportano l'elemento canvas è possibile posizionare un modo alternativo per mostrare il testo tra i tag, ad esempio un testo con stile:
<canvas ...>
<div class="txtStyle">STROKE-ON CANVAS</div>
</canvas>
dimostrazione
Questo produce il tratto animato animato tratto-on ( nessuna dipendenza ) -
var ctx = document.querySelector("canvas").getContext("2d"),
dashLen = 220, dashOffset = dashLen, speed = 5,
txt = "STROKE-ON CANVAS", x = 30, i = 0;
ctx.font = "50px Comic Sans MS, cursive, TSCu_Comic, sans-serif";
ctx.lineWidth = 5; ctx.lineJoin = "round"; ctx.globalAlpha = 2/3;
ctx.strokeStyle = ctx.fillStyle = "#1f2f90";
(function loop() {
ctx.clearRect(x, 0, 60, 150);
ctx.setLineDash([dashLen - dashOffset, dashOffset - speed]); // create a long dash mask
dashOffset -= speed; // reduce dash length
ctx.strokeText(txt[i], x, 90); // stroke letter
if (dashOffset > 0) requestAnimationFrame(loop); // animate
else {
ctx.fillText(txt[i], x, 90); // fill final letter
dashOffset = dashLen; // prep next char
x += ctx.measureText(txt[i++]).width + ctx.lineWidth * Math.random();
ctx.setTransform(1, 0, 0, 1, 0, 3 * Math.random()); // random y-delta
ctx.rotate(Math.random() * 0.005); // random rotation
if (i < txt.length) requestAnimationFrame(loop);
}
})();
canvas {background:url(http://i.imgur.com/5RIXWIE.png)}
<canvas width=630></canvas>