JavaScript Canvas clearHitRegions 教程
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 JavaScript 中的 Canvas clearHitRegions 方法。此方法对于管理 HTML canvas 上的交互区域至关重要。掌握命中区域是创建交互式图形的关键。
基本定义
命中区域是 canvas 上可以响应用户交互(如单击或触摸)的区域。clearHitRegions 方法会删除 canvas 上所有已定义的命中区域。这有助于管理动态交互元素。
主要的命中区域方法是 addHitRegion
、removeHitRegion
和 clearHitRegions
。这些方法与路径绘制方法配合使用,以创建交互式 canvas 元素。
基本 clearHitRegions 用法
此示例演示了如何从 canvas 清除所有命中区域。
<!DOCTYPE html> <html> <head> <title>Basic clearHitRegions</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); // Add a hit region ctx.beginPath(); ctx.rect(50, 50, 100, 100); ctx.addHitRegion({id: 'square'}); // Clear all hit regions ctx.clearHitRegions(); </script> </body> </html>
在这个基本示例中,我们创建了一个 canvas 元素并获取其 2D 上下文。我们向 canvas 添加了一个 ID 为“square”的矩形命中区域。
clearHitRegions
方法会删除 canvas 上的所有命中区域。当您需要完全重置交互区域时,这非常有用。
动态命中区域管理
此示例展示了如何使用 clearHitRegions 动态管理命中区域。
<!DOCTYPE html> <html> <head> <title>Dynamic Hit Regions</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <button id="clearBtn">Clear Regions</button> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); const clearBtn = document.getElementById('clearBtn'); // Add multiple hit regions function addRegions() { ctx.beginPath(); ctx.rect(20, 20, 80, 80); ctx.addHitRegion({id: 'region1'}); ctx.beginPath(); ctx.rect(120, 20, 80, 80); ctx.addHitRegion({id: 'region2'}); } // Clear button handler clearBtn.addEventListener('click', () => { ctx.clearHitRegions(); console.log('All hit regions cleared'); }); addRegions(); </script> </body> </html>
在这里,我们创建了两个矩形命中区域和一个用于清除它们的按钮。addRegions
函数定义了两个不同的命中区域。
当按钮被点击时,clearHitRegions
会删除所有命中区域。这种模式对于区域经常变化的动态 UI 非常有用。
互动游戏示例
此示例在简单的游戏场景中演示了 clearHitRegions。
<!DOCTYPE html> <html> <head> <title>Game Hit Regions</title> </head> <body> <canvas id="gameCanvas" width="400" height="300"></canvas> <script> const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); let score = 0; function createTarget(x, y) { ctx.beginPath(); ctx.arc(x, y, 30, 0, Math.PI * 2); ctx.fillStyle = 'red'; ctx.fill(); ctx.addHitRegion({ id: 'target', cursor: 'pointer' }); } function resetGame() { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.clearHitRegions(); createTarget( Math.random() * (canvas.width - 60) + 30, Math.random() * (canvas.height - 60) + 30 ); } canvas.addEventListener('click', (e) => { const region = e.region; if (region === 'target') { score++; console.log('Score:', score); resetGame(); } }); resetGame(); </script> </body> </html>
这创建了一个简单的游戏,点击红色目标会增加分数。每个目标都是一个响应点击的圆形命中区域。
resetGame
函数使用 clearHitRegions
在创建新目标之前删除旧目标。这确保了干净的交互。
多种区域类型
此示例展示了如何使用 clearHitRegions 管理不同类型的命中区域。
<!DOCTYPE html> <html> <head> <title>Multiple Region Types</title> </head> <body> <canvas id="myCanvas" width="400" height="300"></canvas> <button id="resetBtn">Reset All Regions</button> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); const resetBtn = document.getElementById('resetBtn'); function setupRegions() { // Button region ctx.beginPath(); ctx.rect(50, 50, 100, 50); ctx.fillStyle = '#4CAF50'; ctx.fill(); ctx.addHitRegion({ id: 'greenBtn', cursor: 'pointer' }); // Draggable region ctx.beginPath(); ctx.arc(300, 100, 40, 0, Math.PI * 2); ctx.fillStyle = '#2196F3'; ctx.fill(); ctx.addHitRegion({ id: 'draggable', cursor: 'move' }); } resetBtn.addEventListener('click', () => { ctx.clearHitRegions(); setupRegions(); console.log('Regions reset'); }); canvas.addEventListener('click', (e) => { if (e.region === 'greenBtn') { alert('Button clicked!'); } }); setupRegions(); </script> </body> </html>
此示例创建了两个具有不同行为的独立命中区域。一个绿色的按钮区域会显示警报,而一个蓝色的圆圈是可拖动的。
重置按钮使用 clearHitRegions
在重新创建所有区域之前将其删除。这种模式对于复杂的界面很有用。
高级区域管理
此示例演示了高级命中区域生命周期管理。
<!DOCTYPE html> <html> <head> <title>Advanced Region Management</title> </head> <body> <canvas id="appCanvas" width="500" height="400"></canvas> <div> <button id="addBtn">Add Region</button> <button id="clearBtn">Clear Regions</button> <span id="counter">Regions: 0</span> </div> <script> const canvas = document.getElementById('appCanvas'); const ctx = canvas.getContext('2d'); const addBtn = document.getElementById('addBtn'); const clearBtn = document.getElementById('clearBtn'); const counter = document.getElementById('counter'); let regionCount = 0; function addRandomRegion() { const x = Math.random() * (canvas.width - 80) + 40; const y = Math.random() * (canvas.height - 80) + 40; const size = Math.random() * 30 + 20; const hue = Math.floor(Math.random() * 360); ctx.beginPath(); ctx.arc(x, y, size, 0, Math.PI * 2); ctx.fillStyle = `hsl(${hue}, 70%, 60%)`; ctx.fill(); const regionId = `region-${regionCount}`; ctx.addHitRegion({ id: regionId, cursor: 'pointer' }); regionCount++; counter.textContent = `Regions: ${regionCount}`; } function clearAllRegions() { ctx.clearHitRegions(); ctx.clearRect(0, 0, canvas.width, canvas.height); regionCount = 0; counter.textContent = `Regions: ${regionCount}`; } addBtn.addEventListener('click', addRandomRegion); clearBtn.addEventListener('click', clearAllRegions); canvas.addEventListener('click', (e) => { if (e.region) { console.log(`Clicked region: ${e.region}`); } }); </script> </body> </html>
这个高级示例展示了动态命中区域的创建和管理。用户可以添加随机的圆形区域并完全清除它们。
clearAllRegions
函数使用 clearHitRegions
和 clearRect
来完全重置 canvas。这展示了全面的区域生命周期管理。
来源
在本文中,我们探讨了使用 clearHitRegions 在 HTML canvas 上管理命中区域的各种技术。掌握这些方法对于创建交互式 canvas 应用程序至关重要。
作者
列出 所有 JS Canvas 教程。