У меня есть две фигуры на холсте с использованием CreateJS. В каждую фигуру я включил область попадания с собственной фигурой с прослушивателем наведения мыши. Две фигуры расположены одна над другой. Когда я нажимаю на форму, я получил два обратных вызова. Можно ли получить только обратный вызов для видимых фигур?
CreateJS затрагивает только видимые элементы
Ответы (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
, как работает фактическое взаимодействие с мышью.
Надеюсь, это поможет!