Att*_*War 7 html javascript canvas
当鼠标悬停在图像上时。它被这个 if 语句检测到:
if ((distance(circles[this.index].x, circles[this.index].y, mouse.x, mouse.y)) < circles[this.index].radius)
Run Code Online (Sandbox Code Playgroud)
我还想检测鼠标何时位于图像之外。在之前的 if 语句之后,我不能使用 else 的原因是:
当我在屏幕上生成多个图像时以及当我的鼠标悬停在 1 个图像上时。它确实悬停该图像并且代码检测到它,但它也不会悬停所有其他图像。这就是显示4次“外圈”和1次“内圈”的原因
如日志所示:
Console.log 输出:
Mouse inside circle
Mouse outside circle 4
Mouse inside circle
Mouse outside circle 4
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种检测鼠标何时离开圆圈的方法。
您可以在下面找到我正在使用的代码:
PS:重要的是它检测鼠标在哪个(索引)圈中并离开。我想创建大量图片,但在下面的代码中,我使用了 5 个作为演示 purpeses。
if ((distance(circles[this.index].x, circles[this.index].y, mouse.x, mouse.y)) < circles[this.index].radius)
Run Code Online (Sandbox Code Playgroud)
Mouse inside circle
Mouse outside circle 4
Mouse inside circle
Mouse outside circle 4
Run Code Online (Sandbox Code Playgroud)
只需将另一个属性添加到圆圈中即可
function Circle(x, y, radius, index) {
//Give var for circle
this.x = x;
this.y = y;
this.dx = 1;
this.dy = 1;
this.radius = radius;
this.index = index;
this.mouseInside = false
}
Run Code Online (Sandbox Code Playgroud)
然后更新逻辑改为这样
if ((distance(this.x, this.y, mouse.x, mouse.y)) < circles[this.index].radius) {
if (!this.mouseInside) {
this.mouseInside = true
console.log(`mouse enter circele at ${this.index}`)
}
}
else if (this.mouseInside) {
this.mouseInside = false
console.log(`mouse leave circele at ${this.index}`)
}
Run Code Online (Sandbox Code Playgroud)
检查圆圈是否重叠,您可以决定是否要更新
var overlapsCircles = circles.filter(circle => {
var diffrentId = circle.index != this.index
var overlapping =
distance(this.x, this.y, circle.x, circle.y) < this.radius
return diffrentId && overlapping
})
if (overlapsCircles.length > 0) {
var overlapCircle = overlapsCircles.map(circle => circle.index)
console.log('overlap circle with index ' + overlapCircle)
}
Run Code Online (Sandbox Code Playgroud)
function Circle(x, y, radius, index) {
//Give var for circle
this.x = x;
this.y = y;
this.dx = 1;
this.dy = 1;
this.radius = radius;
this.index = index;
this.mouseInside = false
}
Run Code Online (Sandbox Code Playgroud)
if ((distance(this.x, this.y, mouse.x, mouse.y)) < circles[this.index].radius) {
if (!this.mouseInside) {
this.mouseInside = true
console.log(`mouse enter circele at ${this.index}`)
}
}
else if (this.mouseInside) {
this.mouseInside = false
console.log(`mouse leave circele at ${this.index}`)
}
Run Code Online (Sandbox Code Playgroud)