在画布上画画

Drawing on a canvas

本文关键字:      更新时间:2023-09-26

所以我想在我创建的画布上画画,让我向你展示我的Javascript代码,我会解释发生了什么:

我有两个画布,一个有一个正方形50X50,总是跟在鼠标后面,另一个我想用它来画画。到目前为止,这是可行的,但我希望能够拖动鼠标并继续画画,而不是每次我想画画时都点击鼠标。

function start(){
var canvas_hover_tmp = document.getElementById('canvas_hover');
canvas_hover = canvas_hover_tmp.getContext('2d');
var canvas_click_tmp = document.getElementById('canvas_draw');
canvas_click = canvas_click_tmp.getContext('2d');
window.addEventListener('mousemove', moved, false); //move square with mouse on mouse move
window.addEventListener('mousedown', draw, false); //draw square to canvas at specific location from where mouse is
}  

这个函数只获取我想要使用的画布并设置它们,然后调用事件侦听器,一个跟随鼠标,一个单击并拖动并绘制

function moved(pos){
canvas_hover.clearRect(0,0,1000,600);
var x = pos.clientX;
var y = pos.clientY;
canvas_hover.fillRect(x-25, y-25,50,50);    
}

这个功能允许我悬停一个框,它用鼠标悬停

function draw(draw_pos){
var x = draw_pos.clientX;
var y = draw_pos.clientY;
canvas_click.fillRect(x-25,y-25,50,50);
 }

这是一个根据鼠标所在的位置绘制到画布上特定位置的函数,我可以单击它,它会绘制一个正方形,但我不能像我希望的那样向下单击并拖动并继续绘制。我该怎么做?

 window.addEventListener('load', drawRect, false); //call first function start

我尝试过设置一个名为draw = 1的变量,当它等于1时,意味着继续绘制,当0停止时。但我把它放在一个while循环中,所发生的只是页面崩溃。

我在CSS3中设置了这两个画布,以便相互叠加。

很抱歉,如果这让人困惑,我不知道如何使用这个

任何帮助都会很棒,

感谢:)

您的"设置变量"方法是正确的。只要按住鼠标按钮,你就想画画,所以你必须听mousedownmousemovemouseup,并引入一些全局变量(比如drawOnSecond表示"在第二层画画"):

//move square with mouse on mouse move
window.addEventListener('mousemove', moved, false);
//draw square to canvas at specific location from where mouse is
//you shouldn't drop this listener, as this would prevent drawing via clicking
window.addEventListener('mousedown', draw, false);
// enable/disable drawing while moving the mouse
window.addEventListener('mousedown', enableDraw, false); 
window.addEventListener('mouseup', disableDraw, false); // disable

然后,您必须稍微调整一下moved功能,并实现enableDraw/disableDraw:

function moved(pos){    
    canvas_hover.clearRect(0,0,1000,600);
    var x = pos.clientX;
    var y = pos.clientY;
    canvas_hover.fillRect(x-25, y-25,50,50);
    if(drawOnSecond) // <<---- global variable, default false
        draw(pos);
}
function enableDraw(){
    drawOnSecond = true;
}
function disableDraw(){
    drawOnSecond = false;
}

JSFiddle

相关文章:
  • 没有找到相关文章