所以我想做一条线跟随鼠标,并点击绘制该线,我需要这个绘制多边形。我的想法是每次鼠标移动时画一条线,但随后会弄乱很多线条,所以我决定在用白色线条移动鼠标并清理之后,画出过去的线条,这样只会有一条线条出现从最后一次点击到当前鼠标位置。 My jsFiddle for this.,但它不工作的方式,我想是的,我在点击绘制多边形,但没有线跟随鼠标,所以我不能看到我正在绘制的线。我不明白哪里错了?也许有一些现成的解决方案,我没有找到?我的代码:html canvas一条线跟随鼠标
var polygonX = [];
var polygonY = [];
var lineReady = 0;
var whileLineX;
var whiteLineY;
$("#body").bind('mousemove', function (ev) {
if (lineReady >= 2) {
var context;
//clear old lines
if (whiteLineX !== null && whiteLineY !== null) {
context = $("#canvas")[0].getContext('2d');
context.moveTo(polygonX[lineReady - 1], polygonY[lineReady - 1]);
context.lineTo(whiteLineX, whiteLineY);
context.strokeStyle = '#ffffff';
context.stroke();
}
//draw a new line
context = $("#canvas")[0].getContext('2d');
var offset = $('#body').offset();
var x = ev.clientX - offset.left;
var y = ev.clientY - offset.top;
context.beginPath();
context.moveTo(polygonX[lineReady - 1], polygonY[lineReady - 1]);
context.strokeStyle = '#000000';
context.lineTo(x, y);
context.stroke();
whileLineX = x;
whiteLineY = y;
}
});
$("#body").bind('click', function (ev) {
var offset = $('#body').offset();
var x = ev.clientX - offset.left;
var y = ev.clientY - offset.top;
polygonX
.push(x);
polygonY.push(y);
lineReady++;
if (lineReady >= 2) {
var context = $("#canvas")[0].getContext('2d');
context.beginPath();
context.moveTo(polygonX[lineReady - 2], polygonY[lineReady - 2]);
context.lineTo(polygonX[lineReady - 1], polygonY[lineReady - 1]);
context.stroke();
}
});`
无论何时鼠标移动到上方,使用z-index使用两个画布, ,然后清除整个画布并从源绘制一条线到该鼠标位置。一旦鼠标被释放,从画布下面的源代码到目的地的行再次擦除上面的那个 – Shadow