Second HTML5 App – Text Arranger 1.0
Recently, I have started a quest in order to learn how to work with text on HTML5 canvas. So far I have created the barebones of what will become a realtime text editor.
Right now “Text Arranger” (what I’m calling my app) simply prints to the screen and gives a fill/outline/both option to the user. I’ll be updating it in the coming weeks with more features so it will actually become quite useful.
The JavaScript
All of this is from canvasApp.js, the file where all the application code is stored.
$(document).ready(function() { // Uses Modernizr.js to check for canvas support function canvasSupport() { return Modernizr.canvas; } // Once DOM is ready, start the app canvasApp(); function canvasApp() { // Check for canvas support if (!canvasSupport()) { return; } // Grab the canvas and set the context to 2d var theCanvas = $("#canvasOne"); var context = theCanvas.get(0).getContext("2d"); // Initialize variables var message = ""; var fillOutline = "fill"; // set default fill/outline to fill // Event listeners $("#textBox").keyup(textBoxChanged); $("#fillOutline").change(fillOutlineChanged); // First screen draw drawScreen(); // Event handler functions function textBoxChanged(e) { var target = e.target; message = target.value; drawScreen(); } function fillOutlineChanged(e) { var target = e.target; fillOutline = target.value; drawScreen(); } // Draws or updates the screen. function drawScreen() { // Background context.fillStyle = "#ffffff"; context.fillRect(0, 0, theCanvas.width(), theCanvas.height()); // Outside Border context.strokeStyle = "#000000"; context.strokeRect(5, 5, theCanvas.width()-10, theCanvas.height()-10); // Text context.font = "50px serif"; // Variables created in order to center the text on the canvas var metrics = context.measureText(message); var textWidth = metrics.width; var xPosition = (theCanvas.width()/2) - (textWidth/2); var yPosition = (theCanvas.height()/2); // Draw the text differently depending on fill or outline (stroke) switch(fillOutline) { case "fill": context.fillStyle = "#000000"; context.fillText(message, xPosition, yPosition); break; case "stroke": context.strokeStyle = "#000000"; context.strokeText(message, xPosition, yPosition); break; case "both": context.fillStyle = "#ff0000"; context.fillText(message, xPosition, yPosition); context.strokeStyle = "#000000"; context.strokeText(message, xPosition, yPosition); break; } } } });
I’ve tried my best to document it as well as I can. The code uses my HTML5 Canvas Skeleton.
You can find the current version of the app here: https://www.zesix.com/html5/textArranger1.0/