Search code examples
javascriptpointrect

Javascript: rect.contains(point)


I like to see if mouseclick is in a rectangle area (in canvas). In C# i would do this.

var point = new Point(x, y);
var rectangles = new List<Rect>();
//rectangles.add(new Rect(x,y,h,w));
foreach(var rectangle in rectangles)
{
    if(rectangle.Contains(point))
    {
        //do something
    }
}

In Javascript I Tried this

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.rect(20,20,150,100);
if (ctx.isPointInPath(20,50))
   {
     //do something
   };

But there are more rectangles in the context then in my list rectangles. Can somebody help me out?


Solution

  • if you are going to do anything even slightly complicated with these rects I would define a rectangle object to store, draw, and test for containing points. something like this:

    function MyRect (x, y, w, h) {
    
        this.x = x;
        this.y = y;
        this.width = w;
        this.height = h;
    
        this.contains = function (x, y) {
            return this.x <= x && x <= this.x + this.width &&
                   this.y <= y && y <= this.y + this.height;
        }
    
        this.draw = function (ctx) {
            ctx.rect(this.x, this.y, this.width, this.height)
        }
    }
    

    then use it like this:

    var r = new MyRect(x, y, w, h);
    r.draw(ctx);
    
    if (r.contains(x, y)) {
        // do something
    }