CreateJS затрагивает только видимые элементы

У меня есть две фигуры на холсте с использованием CreateJS. В каждую фигуру я включил область попадания с собственной фигурой с прослушивателем наведения мыши. Две фигуры расположены одна над другой. Когда я нажимаю на форму, я получил два обратных вызова. Можно ли получить только обратный вызов для видимых фигур?

введите здесь описание изображения


person RafelSanso    schedule 28.06.2016    source источник


Ответы (1)


Как и в DOM, способ взаимодействия с мышью заключается в всплывающем списке отображения, который исключает элементы, не являющиеся частью иерархической цепочки целевого объекта события.

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

Тем не менее, вы можете довольно легко подключить свое собственное взаимодействие, используя getObjectsUnderPoint, который сообщает вам, что находится под мышью.

stage.on("click", handleClick);
function handleClick(event) {  
  var list = stage.getObjectsUnderPoint(event.localX, event.localY);
  for (var i=0, l=list.length; i<l; i++) {
    console.log(list[i]);
  }
}

Вот краткий пример: http://jsfiddle.net/y8jhb26x/

Обратите внимание, что вы можете добавить событие мыши в любой контейнер, который вы хотите ограничить, какие объекты будут запускать эту проверку (я только что использовал stage), но когда вы вызываете getObjectsUnderPoint, оно возвращает все под мышью. Если вы хотите проверять элементы только в этом контейнере, вы можете использовать метод contains для фильтрации нежелательных дочерних элементов:

for (var i=0, l=list.length; i<l; i++) {
  if (someContainer.contains(list[i])) {
    console.log(list[i]);
  }
}

Вы также можете использовать аргументы getObjectsUnderPoint для фильтрации элементов с обработчиками мыши или уважать свойство mouseChildren/mouseEnabled, как работает фактическое взаимодействие с мышью.

Надеюсь, это поможет!

person Lanny    schedule 28.06.2016