You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML5 Canvas矩形鼠标悬停时无法展开问题求助

嘿,我看了你的Canvas游戏代码,发现导致矩形悬停不展开的核心问题啦,咱们一步步来解决:

问题分析与修复方案

1. 鼠标坐标判断逻辑完全颠倒(最关键的问题)

你写的鼠标X轴判断条件是:

if (mouse.x >= 1280 && mouse.x <= 1210)

这根本不可能成立啊!1280比1210大,一个数值怎么可能同时大于等于更大的数,又小于等于更小的数?Y轴的判断也犯了同样的错误:

if (mouse.y >= 270 && mouse.y <= 200)

这两个条件永远为false,所以calendarHover永远不会被设为true,自然触发不了展开逻辑。

修复方法:把判断的数值顺序反过来,假设你的日历元素初始区域是X从1210到1280、Y从200到270,那正确的判断应该是:

if (mouse.x >= 1210 && mouse.x <= 1280) {
  if (mouse.y >= 200 && mouse.y <= 270) {
    calendarHover = true;
  } else {
    calendarHover = false;
  }
}

2. 变量作用域的潜在隐患

你在循环里直接使用了未声明的object变量:

for (var i = 0; i < objects.length; i++) {
  object = objects[i]
  object.update()
}

这里的object会变成全局变量,很容易和其他代码的变量产生冲突。建议改成用let/const限制作用域:

for (let i = 0; i < objects.length; i++) {
  const object = objects[i];
  object.update();
}

3. 可选优化:添加尺寸边界控制

现在的展开/收缩逻辑没有限制最大、最小尺寸,可能会让矩形无限变大或变小。可以加个边界判断,让尺寸在合理范围内变化:

if (calendarHover) {
  // 限制最大尺寸,比如设为200
  if (calendar.width < 200) calendar.width++;
  if (calendar.height < 200) calendar.height++;
} else {
  // 限制最小尺寸为初始的70
  if (calendar.width > 70) calendar.width--;
  if (calendar.height > 70) calendar.height--;
}

把这些修改完成后,你的矩形悬停展开功能应该就能正常工作啦!

内容的提问来源于stack exchange,提问作者MadScientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:24:53