본문 바로가기

web

HTML5 마우스 다운 이벤트 - 사각형 영역 체크



function drawRect() {     
     var canvas = document.getElementById("drawERCanvas");
     var context = canvas.getContext("2d");     
     var size = 100;
     var left = (canvas.width - size) * 0.5;
     var top = (canvas.height - size) * 0.5;
     context.beginPath();               
     context.fillStyle = "#EF8B47";
     context.rect(left, top, size, size);
     context.fill();  

     context.font = "12pt Calibri";
     context.fillStyle = "black";
     context.fillText("down position :::  none", 10, 15);
     context.fillText("is down in rect : false", 10, 30);     

 
     var event = window.event;
     
     canvas.addEventListener("mousedown", function(event){
          var canvasPos = getCanvasPos(canvas);
          var mouseX = event.clientX - canvasPos.left + window.pageXOffset;
          var mouseY = event.clientY - canvasPos.top + window.pageYOffset;
          var right = left + size;
          var bottom = top + size;
          var isDownInRect = false;

          if(mouseX >= left && mouseX <= right 
                       && mouseY >= top && mouseY <= bottom) {
                   isDownInRect = true;
          } else {
                   isDownInRect = false;
          }

          context.clearRect(0, 0, 300, 60);
          context.font = "12pt Calibri";
          context.fillStyle = "black";
          context.fillText("down position :::  x : " + mouseX + " y : " + mouseY, 10, 15);
          context.fillText("is down in rect : " + isDownInRect, 10, 30);
     }, false);
}

 

function getCanvasPos(canvas) {
     var obj = canvas;
     var top = 0;
     var left = 0;
     while (obj.tagName != "BODY")
     {
      top += obj.offsetTop;
      left += obj.offsetLeft;
      obj = obj.offsetParent;
     }

     return {
      top: top,
      left: left
     };
}

 

<head>에서 drawRect() 메서드와 getCanvasPos() 메서드를 정의하고, <body>에서 drawRect() 실행.

 

마우스 다운 시 마우스 좌표가 사각형 영역안에 있는지를 체크.

 

마우스 좌표를 text로 표시하는거와 같이 화면의 변화가 있을 때, canvas에 그려져있는 것 지우고 다시 그려야 한다. (context.clearRect(0, 0, 300, 60) 그래서 이거 사용)