在具有一些可拖动图像的html页面上,我们必须使用鼠标指针绘制形状或线条,绘制图像和形状,但不能在可拖动图像上完成。此外,如果用户移动图像,之前绘制的形状应保持
其。同时,我已经能够创建形状和绘制线条,但当我尝试绘制线条时
在图像上它会回到背景中。有人可以建议我如何使用
实现相同的目标
canvas和html5,目前也在使用。
答案 0 :(得分:0)
一种方法是创建一个绘制图像和与该图像相关的形状的函数
您可以通过使用与图像偏移相同的偏移绘制形状来保持图像及其形状的协调。因此,如果您在[x,y]处绘制图像,那么您将添加x& y到形状中的每个点:
// points[] is an array of points that defines the shape you
// want drawn on your image
function drawImageWithShapes(img,points,x,y){
ctx.drawImage(img,x,y);
ctx.beginPath();
ctx.moveTo(points[0].x+x,points[0].y+y);
for(var i=1; i<points.length;i++){
ctx.lineTo(points[i].x+x,points[i].y+y);
}
ctx.stroke();
}
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
ctx.lineWidth=4;
ctx.strokeStyle='red';
var x=50;
var y=50;
var points=[];
points.push({x:37,y:0});
points.push({x:75,y:75});
points.push({x:0,y:75});
points.push({x:37,y:0});
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/sun.png";
function start(){
drawImageWithShapes(img,points,x,y);
}
function drawImageWithShapes(img,points,x,y){
ctx.drawImage(img,x,y);
ctx.beginPath();
ctx.moveTo(points[0].x+x,points[0].y+y);
for(var i=1; i<points.length;i++){
ctx.lineTo(points[i].x+x,points[i].y+y);
}
ctx.stroke();
}
$('#test').click(function(){
x+=10;
y+=10;
ctx.clearRect(0,0,cw,ch);
drawImageWithShapes(img,points,x,y);
});
&#13;
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button id=test>Move and Redraw</button><br><br>
<canvas id="canvas" width=300 height=300></canvas>
&#13;