【问题标题】:How do I get an accurate pointer position on click on top of a draggable layer?如何在单击可拖动图层顶部时获得准确的指针位置?
【发布时间】:2013-01-28 09:46:36
【问题描述】:

我刚刚学习 Kinetic.js,我真的很喜欢使用 HTML5 <canvas> 元素让它变得如此简单。

我有一个比“舞台”(使用动力学术语)更大的大图层,但可以拖动。拖动功能似乎以两种不同的方式干扰点击处理程序:一些单击不注册;并且在那些这样做的情况下,只有当图层处于其原始位置时,位置才是准确的。

Here's a fiddle 显示我遇到的问题。在我的实际代码中,底层实际上是一个图像。

【问题讨论】:

    标签: javascript html canvas kineticjs


    【解决方案1】:

    http://jsfiddle.net/EKaAv/1/

    layer.on ('click', function(e) {
        console.log(e);
        var mousePos = stage.getMousePosition(); // mouse position relative to stage
        var xclick = mousePos.x;
        var yclick = mousePos.y;
        var circle = new Kinetic.Circle({
            x: xclick - layer.getX(), // since position is relative to stage, adjust by layer X
            y: yclick - layer.getY(), // same as above
            radius: 25,
            fill: 'red',
            opacity: 0.5
        });
        layer.add(circle);
        stage.draw();       // redraw the stage immediately
    });
    

    任何似乎未注册的点击都是由于触发了可拖动事件,该事件会覆盖点击事件。

    【讨论】:

    • 太棒了! getX() 和 getY() 正是我想要的,但在文档中找不到。我可能会为移动和编辑实现“模式”,所以我可能不必担心争论的事件处理程序。非常感谢。
    • 我不确定为什么 Kinetic 会使获取/修改 x/y 坐标变得复杂,但确实如此。我之所以知道这一点,是因为我今天花了一些时间在 Kinetic 中对突破性克隆进行快速编程。 :D
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多