简体   繁体   中英

Reusable JavaScript Component: How to make it?

I would like to create a reusable JavaScript component out of the following canvas spinner. Never done this before. How to achieve it and how to use the component?

http://codepen.io/anon/pen/tkpqc

HTML:

<canvas id="spinner"></canvas>

JS:

 var canvas = document.getElementById('spinner');
    var context = canvas.getContext('2d');
    var start = new Date();
    var lines = 8,  
        cW = context.canvas.width,
        cH = context.canvas.height;
        centerX = canvas.width / 2;
        centerY = canvas.height / 2;
        radius = 20;

    var draw = function() {
        var rotation = parseInt(((new Date() - start) / 1000) * lines) % lines;
        context.save();
        context.clearRect(0, 0, cW, cH);

      for (var i = 0; i < lines; i++) {
            context.beginPath();
            //context.rotate(Math.PI * 2 / lines);
        var rot = 2*Math.PI/lines;
        var space = 2*Math.PI/(lines * 12);
        context.arc(centerX,centerY,radius,rot * (i) + space,rot * (i+1) - space);
          if (i == rotation)
            context.strokeStyle="#ED3000";
          else 
            context.strokeStyle="#CDCDCD";
            context.lineWidth=10;
            context.stroke();
        }

        context.restore();
    };
    window.setInterval(draw, 1000 / 30);

EDIT - SOLUTION:

Here comes a solution if anybody is interested

http://codepen.io/anon/pen/tkpqc

There are any number of ways to do this. Javascript is an object oriented language so you can easily write like:

var Spinner = function(canvas_context) 
{
    this.context = canvas_context;
    // Whatever other properties you needed to create
    this.timer = false;

}

Spinner.prototype.draw = function()
{
    // Draw spinner
}

Spinner.prototype.start = function()
{
    this.timer = setInterval(this.start, 1000 / 30);
}

Spinner.prototype.stop = function() {
    clearInterval(this.timer);
}

Now you can use this object like so:

var canvas = document.getElementById('#canvas');
var context = canvas.getContext('2d');

var spinner = new Spinner(context);
spinner.start();

Basically, you are creating a class whose sole purpose in life is to draw a spinner on a canvas. In this example, you'll note that you're passing in the canvas's context into the object, since the details of the canvas itself is not relevant to this class's interest.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM