Peut-être à venir à cette fête un peu en retard, mais j'ai trouvé le tutoriel suivant pour l'habillage du texte sur une toile parfaite.
http://www.html5canvastutorials.com/tutorials/html5-canvas-wrap-text-tutorial/
Depuis que j'ai été capable de penser à obtenir les lignes de travail (désolé Ramirez, le vôtre ne fonctionne pas pour moi!). Mon code complet pour placer du texte dans une toile est comme suit:
<script type="text/javascript">
// http: //www.html5canvastutorials.com/tutorials/html5-canvas-wrap-text-tutorial/
function wrapText(context, text, x, y, maxWidth, lineHeight) {
var cars = text.split("\n");
for (var ii = 0; ii < cars.length; ii++) {
var line = "";
var words = cars[ii].split(" ");
for (var n = 0; n < words.length; n++) {
var testLine = line + words[n] + " ";
var metrics = context.measureText(testLine);
var testWidth = metrics.width;
if (testWidth > maxWidth) {
context.fillText(line, x, y);
line = words[n] + " ";
y += lineHeight;
}
else {
line = testLine;
}
}
context.fillText(line, x, y);
y += lineHeight;
}
}
function DrawText() {
var canvas = document.getElementById("c");
var context = canvas.getContext("2d");
context.clearRect(0, 0, 500, 600);
var maxWidth = 400;
var lineHeight = 60;
var x = 20; // (canvas.width - maxWidth) / 2;
var y = 58;
var text = document.getElementById("text").value.toUpperCase();
context.fillStyle = "rgba(255, 0, 0, 1)";
context.fillRect(0, 0, 600, 500);
context.font = "51px 'LeagueGothicRegular'";
context.fillStyle = "#333";
wrapText(context, text, x, y, maxWidth, lineHeight);
}
$(document).ready(function () {
$("#text").keyup(function () {
DrawText();
});
});
</script>
Où c
est l'ID de ma toile, text
est l'ID de ma zone de texte.
Comme vous pouvez probablement voir suis en utilisant une police non standard. Vous pouvez utiliser @font-face aussi longtemps que vous avez utilisé la police sur certains textes AVANT la manipulation de la toile, sinon la toile ne ramasse pas de la police.
Espérons que cela aide quelqu'un.