Javascript 为什么这个举行活动的鼠标不';一幅帆布画?
有人能给我一些帮助吗?我不明白为什么它不起作用,我什么都试过了,但我就是不明白,我是初学者 我正在尝试为画布绘制制作一个保持鼠标事件,我尝试创建一个while循环,你按住它,它将在画布中绘制,但它不起作用,所以我尝试让循环在控制台中说“你好”。。。但它不起作用Javascript 为什么这个举行活动的鼠标不';一幅帆布画?,javascript,Javascript,有人能给我一些帮助吗?我不明白为什么它不起作用,我什么都试过了,但我就是不明白,我是初学者 我正在尝试为画布绘制制作一个保持鼠标事件,我尝试创建一个while循环,你按住它,它将在画布中绘制,但它不起作用,所以我尝试让循环在控制台中说“你好”。。。但它不起作用 document.addEventListener("mousedown", holding) document.addEventListener("mouseup", noHolding) var hold; function ho
document.addEventListener("mousedown", holding)
document.addEventListener("mouseup", noHolding)
var hold;
function holding(){
hold = true;
console.log("hold: " + hold)
}
function noHolding(){
hold = false;
console.log("hold: " + hold)
}
while(hold == true){
console.log("Holding")
}
你必须考虑执行的顺序。 代码逐行执行(或多或少)。因此,在您的示例中,以下是步骤:
holding
noHolding
hold
键绑定到mousedown
事件
noHolding
绑定到moueup
事件保持
noHolding
hold==true
- 此时hold的值是未定义的,因此循环不会运行
function
和var
声明被移动(提升)到其函数的顶部,如果不在函数中,则移动(提升)到全局范围
稍后按下鼠标按钮时,hold
将设置为true
,但while(hold==true)
语句已经执行,不会再次运行
您应该避免javascript中运行时间超过几毫秒的循环,因为它们会停止任何其他代码的运行(通常)
您可以改为使用。(包括示例)
来自MDN的示例:
//为true时,移动鼠标在画布上绘制
让isDrawing=false;
设x=0;
设y=0;
const myPics=document.getElementById('myPics');
const context=myPics.getContext('2d');
//画布相对于页面边缘的x和y偏移量
const rect=myPics.getBoundingClientRect();
//为mousedown、mousemove和mouseup添加事件侦听器
myPics.addEventListener('mousedown',e=>{
x=e.clientX-右左;
y=e.clientY-rect.top;
isDrawing=true;
});
myPics.addEventListener('mousemove',e=>{
如果(isDrawing==真){
抽绳(上下文,x,y,e.clientX-rect.left,e.clientY-rect.top);
x=e.clientX-右左;
y=e.clientY-rect.top;
}
});
window.addEventListener('mouseup',e=>{
如果(isDrawing==真){
抽绳(上下文,x,y,e.clientX-rect.left,e.clientY-rect.top);
x=0;
y=0;
isDrawing=false;
}
});
函数绘制线(上下文,x1,y1,x2,y2){
context.beginPath();
context.strokeStyle='black';
context.lineWidth=1;
上下文。移动到(x1,y1);
lineTo(x2,y2);
stroke();
closePath();
}
画布{
边框:1px纯黑;
宽度:560px;
高度:360px;
}
使用鼠标事件绘制
< /代码>没问题,如果我的回答帮助你考虑接受它,这样它也能帮助别人。