功能:实现简单画板功能
很简单,基本的html文件+js文件

html文件:
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas Paint</title>
        <style type="text/css">
        <!--
          #container 
{ position: relative;}
          #imageView 
{ border: 1px solid #000; }
        -->
</style>
  </head>
  <body>
    <div id="container">
      <canvas id="imageView" width="800" height="800">
      </canvas>
    </div>
    <script type="text/javascript" src="js/draw.js"></script>
  </body>
</html>

js文件:draw.js
var canvas;
var context;
var tool;

/**
 * called on window load.
 
*/
if(window.addEventListener){
    window.addEventListener('load',
            init(),
            false);
}

/**
 * init.
 
*/
function init(){
    /**
     * find the canvas element.
     
*/
    canvas = document.getElementById('imageView');
    if(!canvas){
        return;
    }
    if(!canvas.getContext){
        return;
    }

    /**
     * get the 2D canvas context.
     
*/
    context = canvas.getContext('2d');
    if(!context){
        return;
    }

    /**
     * pencil tool instance.
     
*/
    tool = new tool_pencil();

    /**
     * attach the mousedown, mousemove and mouseup event listeners.
     
*/
    canvas.addEventListener('mousedown', ev_canvas, false);
    canvas.addEventListener('mousemove', ev_canvas, false);
    canvas.addEventListener('mouseup',   ev_canvas, false);
    
}

/**
 * This painting tool 
 * works like a drawing pencil 
 * which tracks the mouse movements.
 * 
 * @returns {tool_pencil}
 
*/
function tool_pencil(){
    var tool = this;
    this.started = false;

    /**
     * This is called when you start holding down the mouse button.
     * This starts the pencil drawing.
     
*/
    this.mousedown = function (ev){
        /**
         * when you click on the canvas and drag your mouse
         * the cursor will changes to a text-selection cursor
         * the "ev.preventDefault()" can prevent this.
         
*/
        ev.preventDefault();
        context.beginPath();
        context.moveTo(ev._x,ev._y);
        tool.started = true;
    };

    /**
     * This is called every time you move the mouse.
     * Obviously, it only draws if the tool.started state is set to true
     
*/
    this.mousemove = function (ev){
        if(tool.started){
            context.lineTo(ev._x,ev._y);
            context.stroke();
        }
    };

    /**
     * This is called when you release the mouse button.
     
*/
    this.mouseup = function (ev) {
        if(tool.started){
            tool.mousemove(ev);
            tool.started = false;
        }
    };
}

/**
 * general-purpose event handler.
 * determines the mouse position relative to the canvas element.
 * 
 * @param ev
 
*/
function ev_canvas(ev){
    var x,y;
    if(ev.offsetX || ev.offsetY == 0){
        ev._x = ev.offsetX;
        ev._y = ev.offsetY;
    }
    
    /**
     * call the event handler of the tool.
     
*/
    var func = tool[ev.type];
    if (func) {
      func(ev);
    }
}

posted on 2013-09-13 09:55 Ying-er 阅读(2658) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: