簡體   English   中英

將onclick和onmouseover添加到畫布元素

[英]add onclick and onmouseover to a canvas element

我已經嘗試做很長時間了,但是我不知道該怎么做!

我不了解JQuery,因此不幸的是,這對我不起作用。

<canvas id="canvas"></canvas>
<script>
  var c = document.getElementById('canvas');
  var ctx = c.getContext('2d');

  c.width = '500';
  c.height = '400';
  c.style.border = '1px solid #000000';
  c.style.background = '#b2b2b2';

  ctx.beginPath();
  ctx.fillStyle = '#ff0000';
  ctx.fillRect(50,50,30,30);
  ctx.addEventListener('click',function(){alert('You clicked me!')},false)
</script>

我想要的是,當用戶單擊正方形時,將彈出警報,但不會發生。

canvas上下文用於在畫布上繪制圖形。 因此,與其嘗試將事件偵聽器添加到您的上下文中,不如將其添加到canvas( c )元素中,如下所示:

c.addEventListener('click', function() {
  // logic...
}

如果您希望僅在單擊發生在紅色框中時才顯示彈出窗口,則需要獲取單擊的xy坐標,並檢查是否在紅色框中:

 var c = document.getElementById('canvas'); var ctx = c.getContext('2d'); c.width = 500; c.height = 400; c.style.border = '1px solid #000000'; c.style.background = '#b2b2b2'; ctx.beginPath(); ctx.fillStyle = '#ff0000'; var box = { x: 50, y: 50, w: 30, h: 30 } ctx.fillRect(box.x, box.y, box.w, box.h); c.addEventListener('click', function(ev) { var {x, y} = getCursorPosition(c, ev); if(box.x <= x && x <= box.x+box.w && box.y <= y && y <= box.y+box.h) { alert('You clicked me!'); } }); function getCursorPosition(canvas, ev) { var rect = canvas.getBoundingClientRect() var x = ev.clientX - rect.left var y = ev.clientY - rect.top return {x, y}; } 
 <canvas id="canvas"></canvas> 

您的變量ctx在畫布的圖形上下文中,而不是畫布本身。 命名為c的變量是要向其添加事件偵聽器的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM