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
相关产品推荐
相关产品推荐

