100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > html5 canvas 画板 demo html5 canvas 简单画板实现代码

html5 canvas 画板 demo html5 canvas 简单画板实现代码

时间:2019-01-22 12:03:55

相关推荐

html5 canvas 画板 demo html5 canvas 简单画板实现代码

canvas简单画板

#can{ width:600px; height:500px; border:1px solid #ccc; margin-top:0px; margin-left:20px;}

canvas简单画板

function getBodyOffsetTop(el){

var top = 0;

do{

top = top + el.offsetTop;

}while(el = el.offsetParent);

return top;

}

function getBodyOffsetLeft(el){

var left = 0;

do{

left = left + el.offsetLeft;

}while(el = el.offsetParent);

return left;

}

function Drawing(canvas,options){

typeof canvas == 'string' && (canvas = document.getElementById(canvas));

if(!canvas || !canvas.getContext){

throw new Error(100,'do not support canvas!');

}

this.option = {

colors:['#000000','#ff0000','#00ff00','#0000ff','#00ffff','#7fef02','#4488bb']

};

this.setOption(options);

this.init(canvas);

}

Drawing.prototype = {

setOption:function(options){

typeof options == 'object' || (options = {});

for(var i in options){

switch(i){

case 'colors':

this.option[i] = options[i];

break;

}

}

},

init:function(canvas){

this.canvas = canvas;

this.context = canvas.getContext('2d');

this.context.lineWidth = 1;

this.context.lineJons = 'round';

this.context.lineCep = 'round';

this.isButtonDown = false;

this.historyStroker = [];

this.curStroker = {color:'#000000',path:[]};

this.lastX = 0;

this.lastY = 0;

this.curColor = '#000000';

this.toolbarspos ={};

this.bindEvent();

this.ResetDrawToolbar();

},

bindEvent:function(){

var self = this;

this.canvas.addEventListener('mousemove',function(event){

var x = event.pageX-getBodyOffsetLeft(this),

y = event.pageY-getBodyOffsetTop(this);

self.onMouseMove({x:x,y:y});

},false);

this.canvas.addEventListener('mousedown',function(event){

var x = event.pageX-getBodyOffsetLeft(this),

y = event.pageY-getBodyOffsetTop(this);

self.onMouseDown(event,{x:x,y:y});

},false);

this.canvas.addEventListener('mouseup',function(event){

var x = event.pageX-getBodyOffsetLeft(this),

y = event.pageY-getBodyOffsetTop(this);

self.onMouseUp(event,{x:x,y:y});

},false);

this.canvas.addEventListener('click',function(event){

var x = event.pageX-getBodyOffsetLeft(this),

y = event.pageY-getBodyOffsetTop(this);

self.onClick({x:x,y:y});

},false);

},

onMouseMove:function(pos){

if(this.isButtonDown){

var p = this.toolbarspos;

for(var i in p){

if(pos.x >= p[i].x

&& pos.x <= p[i].x+p[i].w

&& pos.y >= p[i].y

&& pos.y <= p[i].y+p[i].h){

return;

}

}

this.context.lineTo(pos.x,pos.y);

this.context.stroke();

this.lastX = pos.x;

this.lastY = pos.y;

this.curStroker.path.push(pos);

}

},

onMouseDown:function(event,pos){

if(event.button == 0){

var p = this.toolbarspos;

for(var i in p){

if(pos.x >= p[i].x

&& pos.x <= p[i].x+p[i].w

&& pos.y >= p[i].y

&& pos.y <= p[i].y+p[i].h){

return;

}

}

this.isButtonDown = true;

this.lastX = pos.x;

this.lastY = pos.y;

this.context.beginPath();

this.context.moveTo(this.lastX,this.lastY);

this.curStroker.color = this.curColor;

this.curStroker.path.push(pos);

}

},

onMouseUp:function(event,pos){

if(event.button == 0){

var p = this.toolbarspos;

for(var i in p){

if(pos.x >= p[i].x

&& pos.x <= p[i].x+p[i].w

&& pos.y >= p[i].y

&& pos.y <= p[i].y+p[i].h){

return;

}

}

this.isButtonDown = false;

this.historyStroker.push(this.curStroker);

this.curStroker = {color:this.curColor,path:[]};

}

},

ResetDrawAll:function(){

this.context.clearRect(0,0,500,500);

this.ResetDrawCentre();

this.ResetDrawToolbar();

},

ResetDrawCentre:function(){

var p = this.historyStroker,p2,

curColor = this.context.strokeStyle;

for(var i=0; i< p.length;i++){

this.context.strokeStyle = p[i].color;

this.context.beginPath();

for(var t=0; t

p2 = p[i].path[t];

if(t==0) this.context.moveTo(p2.x,p2.y);

this.context.lineTo(p2.x,p2.y);

this.context.stroke();

}

this.context.beginPath();

}

this.context.strokeStyle = curColor;

},

ResetDrawToolbar:function(){

var curcolor = this.context.fillStyle;

for(var i=0; i

this.context.fillStyle = this.option.colors[i];

if(this.curColor == this.context.fillStyle){

this.context.fillRect(i*35+5,2,30,20);

this.toolbarspos[i] ={x:i*35+5,y:2,w:30,h:20};

}else{

this.context.fillRect(i*35+5,5,30,20);

this.toolbarspos[i] = {x:i*35+5,y:5,w:30,h:20};

}

this.context.stroke();

}

this.context.fillStyle = curcolor;

},

onClick:function(pos){

var p = this.toolbarspos;

for(var i in p){

if(pos.x >= p[i].x

&& pos.x <= p[i].x+p[i].w

&& pos.y >= p[i].y

&& pos.y <= p[i].y+p[i].h){

this.curColor = this.option.colors[i];

this.context.strokeStyle = this.curColor;

this.ResetDrawAll();

}

}

}

};

new Drawing('can');

提示:您可以先修改部分代码再运行

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。