2013-02-12 2 views
1

Я просто изучаю Kinetic.js, и мне очень нравится, как легко это делается с помощью элемента HTML5 <canvas>.Как получить точную позицию указателя при щелчке поверх перетаскиваемого слоя?

У меня большой слой, который больше, чем «этап» (для использования кинетического языка), но он перетаскивается. Функция перетаскивания, по-видимому, мешает обработчику двух разных способов: некоторые отдельные клики не регистрируются; и и тех, которые это делают, местоположение является точным только в том случае, если слой находится в исходном положении.

Here's a fiddle отображение вопроса, который у меня есть. В моем фактическом коде нижний слой на самом деле является изображением.

ответ

2

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

Всех клики, которые, кажется, не может быть зарегистрированы в связи с перетаскиваемым обжигом события, которое переопределяет событие щелчка.

+0

Блестящий! GetX() и getY() были именно тем, что я искал, но не смогли найти в документации. Я, вероятно, буду использовать «режимы» для перемещения и редактирования, поэтому мне, вероятно, не придется беспокоиться о обработчиках событий. Спасибо. –

+0

Я не совсем уверен, почему Kinetic усложняет получение/изменение координат x/y, но это так. Я знаю только это, потому что я потратил некоторое время на программирование скоростного клона в Кинетике сегодня. : D – Shmiddty

Смежные вопросы