Javascript 仅画布上最后添加的对象具有光标指针

Javascript 仅画布上最后添加的对象具有光标指针,javascript,canvas,Javascript,Canvas,我在画布上有一个小问题,当鼠标在元素(对象)上时,它应该将光标更改为指针,当离开时,返回默认值,但我的代码不是这样工作的,我已经没有想法了 var canvas=document.getElementById(“canvas”); var ctx=canvas.getContext(“2d”); var canvasOffset=$(“#画布”).offset(); var offsetX=canvasOffset.left; var offsetY=canvasOffset.top; var

我在画布上有一个小问题,当鼠标在元素(对象)上时,它应该将光标更改为指针,当离开时,返回默认值,但我的代码不是这样工作的,我已经没有想法了

var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var canvasOffset=$(“#画布”).offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;
var rectList=[];
变量游标=['default','pointer'],
currentCursor=0;
函数createRectangle(id、x、y、宽度、高度、填充颜色){
var newRectangle={
x,,
Y
身份证件
宽度,
高度,
fillColor,
mouseX:null,
穆西:空,
石广生:错,
isClicked:错,
游标:0,//0默认值,1个指针
画(){
drawRect(this.x,this.y,this.width,this.height,this.fillColor)
},
突出显示(){
十字线(这个.x,这个.y,这个.width,这个.height,20,25,6,1,2,2,2,2,“#E15258',“#E15258',“#C25975”);
},
isPointInside(){
返回(this.mouseX>=this.x&&this.mouseX=this.y&&this.mouseY{
rect.mouseX=mouseX;
rect.mouseY=mouseY;
if(rect.isPointInside()){
currentCursor=1;
if(矩形被勾选){
rect.ishighlight=false;
}否则{
rect.ishighletted=true;
}
}否则{
rect.ishighlight=false;
currentCursor=0;
}
});
canvas.style.cursor=游标[currentCursor];
}
document.onclick=函数(鼠标){
var mouseX=parseInt(mouse.clientX-offsetX);
var mouseY=parseInt(mouse.clientY-offsetY);
rectList.forEach(rect=>{
rect.mouseX=mouseX;
rect.mouseY=mouseY;
if(rect.isPointInside()){
如果(矩形isHighlighted){
rect.ishighlight=false;
rect.isClicked=true;
}否则{
rect.isClicked=false;
}
}否则{
rect.isClicked=false;
}
});
}
函数更新(){
clearRect(0,0,canvas.width,canvas.height);
rectList.forEach(rect=>{
如果(矩形isHighlighted){
rect.draw();
rect.highlight();
}否则{
rect.draw();
}
if(rect.isClicked){
rect.draw();
rect.highlight();
}否则{
rect.draw();
}
});
requestAnimationFrame(更新);
}
函数startNewName(){
createRectangle('orange',25,25,30/2,30/2,'orange');
createRectangle('green',50,50,30/2,30/2,'green');
创建矩形('blue',75,75,30/2,30/2,'blue');
创建矩形('yellow',100100,30/2,30/2,'yellow');
createRectangle('lightgreen',125,125,30/2,30/2,'lightgreen');
requestAnimationFrame(更新);
}
startNewName();
画布{
边框:1px纯黑;
}

当鼠标位于任何其他矩形上时,在
onmousemove
函数中的ForEach的下一次迭代中,您将
currentCursor
直接设置回0

我通过在循环之前将
currentCursor
设置为0来修复它

var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var canvasOffset=$(“#画布”).offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;
var rectList=[];
变量游标=['default','pointer'];
函数createRectangle(id、x、y、宽度、高度、填充颜色){
var newRectangle={
x,,
Y
身份证件
宽度,
高度,
fillColor,
mouseX:null,
穆西:空,
石广生:错,
isClicked:错,
游标:0,//0默认值,1个指针
画(){
drawRect(this.x,this.y,this.width,this.height,this.fillColor)
},
突出显示(){
十字线(这个.x,这个.y,这个.width,这个.height,20,25,6,1,2,2,2,2,“#E15258',“#E15258',“#C25975”);
},
isPointInside(){
返回(this.mouseX>=this.x&&this.mouseX=this.y&&this.mouseY{
rect.mouseX=mouseX;
rect.mouseY=mouseY;
if(rect.isPointInside()){
currentCursor=1;
if(矩形被勾选){
rect.ishighlight=false;
}否则{
rect.ishighletted=true;
}
}否则{
rect.ishighlight=false;
}
});
canvas.style.cursor=游标[currentCursor];
}
document.onclick=函数(鼠标){
var mouseX=parseInt(mouse.clientX-offsetX);
var mouseY=parseInt(mouse.clientY-off