【问题标题】:KineticJS mouse position of image图像的 KineticJS 鼠标位置
【发布时间】:2017-02-09 12:08:58
【问题描述】:

我有这样的图片

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

如何根据图像获取鼠标位置。 根据这个例子,我可以得到位置 Object{0, 0} ~ {100, 1000}

我只找到了一个api stage.getPointerPosition()

【问题讨论】:

    标签: mouseevent kineticjs


    【解决方案1】:

    如果你想在click 上获得鼠标位置,那么你可以这样做:

    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);
    });
    

    尽管它使用KonvaJS,但请在下面找到工作示例,但概念是相同的。而且您还应该开始使用 Konva,因为它得到了很好的维护和记录。

    <!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>

    【讨论】:

    • 谢谢我有其他方法可以做到这一点,使用 stage.getPointerPosition() + offset(x,y) 来计算正确的位置。我会尝试 getAbsoluteTransform().copy().invert().point(mousePos);是不是一样的结果。
    • 谢谢。顺便问一下,KonvaJS 是 KineticJS 的新版本吗?我将尝试将代码移至 KonvaJs,
    猜你喜欢
    • 2014-06-23
    • 2013-08-11
    • 2012-10-02
    • 2013-03-31
    • 2013-03-11
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多