Question

My client wants to show an emission label on his e-commerce site. The label looks like this:

enter image description here

And there is 448 possible variants of this with the arrows pointing to different values.

I was wondering if it would be better to only have a base image of this (without the arrows), and then add add content on it.

How would I do this using canvas? I know how to draw a line using canvas, but that's about it. Should I use a 3rd party library for this? I'm already using jQuery but that's not going to get me anywhere.

So, tl;dr;

Place 3 "arrows" on image, and fill them with text. How do I align the arrows correctly?

Was it helpful?

Solution

You could accomplish your task in many ways.

Here's an example using your html canvas suggestion of an image drawn on canvas without arrows and then using canvases drawing commands to apply the arrows:

http://jsfiddle.net/m1erickson/u8TCv/

enter image description here

Example code:

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    canvas{border:1px solid red;}
</style>
<script>
$(function(){

    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");

    var img=new Image();
    img.onload=start;
    img.src="https://dl.dropboxusercontent.com/u/139992952/multple/emission.png";
    function start(){
        canvas.width=img.width;
        canvas.height=img.height;
        ctx.drawImage(img,0,0);
        drawArrow(91,166,56,36,15,"C");
    }

    function drawArrow(x,y,w,h,pointWidth,text){
        // arrow
        ctx.beginPath();
        ctx.moveTo(x,y);
        ctx.lineTo(x+pointWidth,y-h/2);
        ctx.lineTo(x+w,y-h/2);
        ctx.lineTo(x+w,y+h/2);
        ctx.lineTo(x+pointWidth,y+h/2);
        ctx.closePath();
        ctx.fillStyle="black";
        ctx.fill();
        // text
        ctx.font="36px arial black";
        ctx.fillStyle="white";
        ctx.fillText(text,x+pointWidth+5,y+h/3);
    }

}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="canvas" width=300 height=300></canvas>
</body>
</html>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top