我想在画布上绘制矩形.下面的代码工作正常,除非我绘制矩形时鼠标移动时不显示路径.当我离开鼠标时,在画布上可以看到矩形.
请帮忙,
谢谢
var canvas,ctx,flag = false,prevX = 0,currX = 0,prevY = 0,currY = 0,currShape = 'rectangle',mouseIsDown = 0,startX,endX,startY,endY,dot_flag = false; var x = "white",y = 2; function init() { canvas = document.getElementById('can'); ctx = canvas.getContext("2d"); var imageObj = new Image(); //Canvas image Obj imageObj.onload = function() { ctx.drawImage(imageObj,69,50); //Load Image on canvas }; imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg'; //Load Image w = canvas.width; // Canvas Width h = canvas.height; // Canvas Height //Check Shape to be draw eventListener(); } function eventListener(){ if(currShape=='rectangle'){ canvas.addEventListener("mousedown",function (e) { mouseDown(e); },false); canvas.addEventListener("mousemove",function (e){ mouseXY(e); },false); canvas.addEventListener("mouseup",function (e){ mouseUp(e); },false); } } function mouseUp(eve) { if (mouseIsDown !== 0) { mouseIsDown = 0; var pos = getMousePos(canvas,eve); endX = pos.x; endY = pos.y; if(currShape=='rectangle') { drawSquare(); //update on mouse-up } } } function mouseDown(eve) { mouseIsDown = 1; var pos = getMousePos(canvas,eve); startX = endX = pos.x; startY = endY = pos.y; if(currShape=='rectangle') { drawSquare(); //update on mouse-up } } function mouseXY(eve) { if (mouseIsDown !== 0) { var pos = getMousePos(canvas,eve); endX = pos.x; endY = pos.y; //drawSquare(); } } function drawSquare() { // creating a square var w = endX - startX; var h = endY - startY; var offsetX = (w < 0) ? w : 0; var offsetY = (h < 0) ? h : 0; var width = Math.abs(w); var height = Math.abs(h); ctx.beginPath(); ctx.globalAlpha=0.7; ctx.rect(startX + offsetX,startY + offsetY,width,height); ctx.fillStyle = x; ctx.fill(); ctx.linewidth = y; ctx.strokeStyle = x; ctx.stroke(); } function getMousePos(canvas,evt) { var rect = canvas.getBoundingClientRect(); return { x: evt.clientX - rect.left,y: evt.clientY - rect.top }; }
.colortool div { width: 15px; height: 15px; float: left; margin-left: 2px; } .clear { clear: both; }
<!DOCTYPE HTML> <html> <body onload="init()"> <div class="canvasbody"> <canvas id="can" width="400" height="400" style="border:1px dotted #eee;"></canvas> </div> </body> </html>
解决方法
这是你的新JavaScript
var canvas,cnvHid,cnvRender,y = 2; function init() { canvas = document.getElementById('can'); cnvHid = document.getElementById( "canHid" ); cnvRender = document.getElementById( "canRend" ); ctx = canvas.getContext("2d"); var imageObj = new Image(); //Canvas image Obj imageObj.onload = function() { ctx.drawImage(imageObj,50); //Load Image on canvas renderAllCanvas(); }; imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg'; //Load Image w = canvas.width; // Canvas Width h = canvas.height; // Canvas Height //Check Shape to be draw eventListener(); } function eventListener(){ if(currShape=='rectangle'){ cnvRender.addEventListener("mousedown",function (e) { mouseDown(e); renderAllCanvas(); },false); cnvRender.addEventListener("mousemove",function (e){ mouseXY(e); renderAllCanvas(); },false); cnvRender.addEventListener("mouseup",function (e){ mouseUp(e); renderAllCanvas(); },false); } } function mouseUp(eve) { if (mouseIsDown !== 0) { mouseIsDown = 0; var pos = getMousePos(canvas,eve); endX = pos.x; endY = pos.y; if(currShape=='rectangle') { drawSquare( canvas ); //update on mouse-up cnvHid.getContext( "2d" ).clearRect( 0,cnvHid.width,cnvHid.height ); } } } function mouseDown(eve) { mouseIsDown = 1; var pos = getMousePos(canvas,eve); startX = endX = pos.x; startY = endY = pos.y; if(currShape=='rectangle') { drawSquare( canvas ); //update on mouse-up } } function mouseXY(eve) { if (mouseIsDown !== 0) { var pos = getMousePos(canvas,eve); endX = pos.x; endY = pos.y; drawSquare( cnvHid,true ); } } function drawSquare( cnv,clear ) { var ctx = cnv.getContext( "2d" ); if( clear && clear === true ){ ctx.clearRect( 0,cnv.width,cnv.height ); } // creating a square var w = endX - startX; var h = endY - startY; var offsetX = (w < 0) ? w : 0; var offsetY = (h < 0) ? h : 0; var width = Math.abs(w); var height = Math.abs(h); ctx.beginPath(); ctx.globalAlpha=0.7; ctx.rect(startX + offsetX,height); ctx.fillStyle = x; ctx.fill(); ctx.linewidth = y; ctx.strokeStyle = x; ctx.stroke(); ctx.closePath(); } function getMousePos(canvas,y: evt.clientY - rect.top }; } function renderAllCanvas(){ var cnxRender = cnvRender.getContext( "2d" ); cnxRender.drawImage( canvas,cnvRender.width,cnvRender.height ); cnxRender.drawImage( cnvHid,cnvRender.height ); }
这是你的新HTML
<!DOCTYPE HTML> <html> <body onload="init()"> <div class="canvasbody"> <canvas id="can" width="400" height="400" style="display: none;"></canvas> <canvas id="canHid" width="400" height="400" style="display: none;"></canvas> <canvas id="canRend" width="400" height="400" style="border:1px dotted #eee;"></canvas> </div> </body> </html>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。