Search code examples
mouseeventkineticjs

KineticJS mouse position of image


I have a image like this

var image = new Kinetic.Image({
            x : x,
            y : y,
            width : 1000,
            height :100,
            image : image,
});

How do I get the mouse position based on the image. according this example, I could get position Object{0, 0} ~ {100, 1000}

I only found an api stage.getPointerPosition()


Solution

  • If you want to get mouse position on click then you can do this:

    image.on('click', function(){
        var mousePos = youStage.getPointerPosition();
        var p = { x: mousePos.x, y: mousePos.y }; // p is a clone of mousePos
        var r =  image.getAbsoluteTransform().copy().invert().point(mousePos);
    });
    

    Please find the working example below albeit it uses KonvaJS but the concept is same. And you should also start using Konva cause it's well maintained and documented.

    <!DOCTYPE html>
    <html>
    
    <head>
      <script src="https://cdn.rawgit.com/konvajs/konva/1.4.0/konva.min.js"></script>
      <meta charset="utf-8">
      <title>Konva Image Demo</title>
      <style>
        body {
          margin: 0;
          padding: 0;
          overflow: hidden;
          background-color: #F0F0F0;
        }
      </style>
    </head>
    
    <body>
      <div id="container"></div>
      <script>
        var width = window.innerWidth;
        var height = window.innerHeight;
        var stage = new Konva.Stage({
          container: 'container',
          width: width,
          height: height
        });
        var layer = new Konva.Layer();
        var imageObj = new Image();
        imageObj.onload = function() {
          var yoda = new Konva.Image({
            x: 50,
            y: 50,
            image: imageObj,
            width: 106,
            height: 118
          });
          yoda.on('click', function() {
            var mousePos = stage.getPointerPosition();
            var p = {
              x: mousePos.x,
              y: mousePos.y
            }; // p is a clone of mousePos
            var r = yoda.getAbsoluteTransform().copy().invert().point(mousePos);
            console.log(r);
          });
          // add the shape to the layer
          layer.add(yoda);
          // add the layer to the stage
          stage.add(layer);
        };
        imageObj.src = 'https://upload.wikimedia.org/wikipedia/en/thumb/9/9b/Yoda_Empire_Strikes_Back.png/220px-Yoda_Empire_Strikes_Back.png';
      </script>
    </body>
    
    </html>