2009-02-17 3 views
4

Я использую Canvas itemRenderer для контейнера, который я использую для отображения изображений. См. Псевдо-код ниже.Как остановить событие Mouse Out при запуске Flex Canvas для дочерних элементов

image = new Image(); 
image.source = [email protected]; 
this.addChild(image); 
this.addEventListener(MouseEvent.MOUSE_OVER, enlarge(image)); 
this.addEventListener(MouseEvent.MOUSE_OUT, shrink(image)); 

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

Может ли кто-нибудь указать мне в сторону способа отключения этого поведения?

Спасибо :)

ответ

16

Вы должны использовать MouseEvent.ROLL_OVER и MouseEvent.ROLL_OUT события вместо этого.

Из документации Flash CS4:

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

+0

спасибо, отлично работает. Однако, если я открываю выпадающий список combobox, он запускает «приложение» ROLL_OUT ... любую идею? – jujule

+0

Выпадающее поле со списком, вероятно, размещено на PopUpManager (если вы используете Flex) или, может быть, на самой сцене (для чего-либо еще), что, скорее всего, вне вашего приложения, так что, как я полагаю, это можно ожидать. – joshtynjala

2

Я согласен с Джошем в том, что события ROLL_OVER кажутся более подходящими для того, что вы делаете. Однако вы должны знать о свойстве mouseChildrenflash.display.DisplayObjectContainer (предок UIComponent).

1

Радиус работы для меня. О проблеме с comboBox: Вы также можете проверить, является ли цель события дочерним элементом из контейнера.