В Two.js объекты сцены могут быть организованы в
группы, что позволяет управлять множеством фигур как
единым целым. Каждая группа, как и отдельные элементы
(Two.Path, Two.Rectangle,
Two.Circle и др.), поддерживает подписку на
события. Это делает возможным отслеживание кликов, наведения
мыши, изменения состояния объектов и других пользовательских
взаимодействий.
Two.js использует простую событийную модель,
основанную на методах bind и unbind. Основные
принципы работы событий в группах:
event.stopPropagation() для предотвращения дальнейшего
распространения события вверх по иерархии.Пример подписки на событие для группы:
var group = two.makeGroup([rect, circle]);
group.bind('mouseover', function(event) {
console.log('Курсор над группой');
});
rect.bind('click', function(event) {
console.log('Нажатие на прямоугольник');
});
В этом примере событие click на прямоугольнике
не автоматически всплывает на группу, но событие
mouseover можно отслеживать как на дочерних элементах, так
и на всей группе.
В Two.js всплытие событий работает аналогично DOM-модели, но с особенностями, связанными с визуальными элементами:
click возникает
на этом круге.Пример организации всплытия:
var parentGroup = two.makeGroup();
var childGroup = two.makeGroup([circle, rect]);
parentGroup.add(childGroup);
childGroup.bind('click', function(event) {
console.log('Нажатие на дочернюю группу');
// event.stopPropagation(); // Прекращает всплытие
});
parentGroup.bind('click', function(event) {
console.log('Нажатие на родительскую группу');
});
Если не использовать stopPropagation, при клике на
элемент дочерней группы вывод будет следующим:
Нажатие на дочернюю группу
Нажатие на родительскую группу
Two.js позволяет назначать разные обработчики на один и тот же тип события, но на разных уровнях иерархии. Это дает гибкость:
childGroup.bind('mouseover', function(event) {
this.children.forEach(function(item) {
item.fill = '#ff0000'; // Подсветка всех элементов
});
});
parentGroup.bind('mouseout', function(event) {
parentGroup.children.forEach(function(child) {
child.children.forEach(function(item) {
item.fill = '#0000ff'; // Сброс цвета
});
});
});
stopPropagation для
управления уровнем обработки события.click, mouseover и mouseout можно
настроить для всплытия через кастомные обработчики.Group -> Parent Group -> Scene.event.target, что позволяет
точно определить, на каком элементе произошло событие, даже при
всплытии.В результате, правильно организованная иерархия групп и грамотная
работа с методами bind, unbind и
stopPropagation обеспечивает гибкое управление
событиями, позволяя создавать сложные интерактивные сцены в
Two.js.