Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Два ребенка, друг на друге. Два слушателя, на каждом. При клике срабатывают оба. (http://www.flasher.ru/forum/showthread.php?t=139287)

Tr1te 27.04.2010 16:06

Два ребенка, друг на друге. Два слушателя, на каждом. При клике срабатывают оба.
 
Есть большой прямоугольник, как отдельный объект, на нем есть слушатель на клик. Еще поверх него добавляю маленький прямоугольник, на котором тоже есть слушатель на клик.И когда кликаю по маленькому прямоугольнику, слушатель срабатывает и на большом и на маленьком объекте. А как сделать так чтобы при клике на маленький объект срабатывал только его слушатель, а не оба.

Волгоградец 27.04.2010 16:23

Чего чего? Сделать чтобы срабатывал верхний слушатель?

Tr1te 27.04.2010 16:37

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

dmitriev 27.04.2010 16:57

Код AS3:

var sprite1:Sprite = new Sprite();
sprite1.graphics.beginFill(0x000000, 1);
sprite1.graphics.drawRect(0, 0, 100, 100);
 
sprite1.x = 75;
sprite1.y = 50;
addChild(sprite1);
 
var sprite2:Sprite = new Sprite();
sprite2.graphics.beginFill(0x0000CC, 1);
sprite2.graphics.drawRect(0, 0, 200, 100);
 
sprite2.x = 100;
sprite2.y = 80;
addChild(sprite2);
 
sprite1.addEventListener(MouseEvent.CLICK, clickFirst);
sprite2.addEventListener(MouseEvent.CLICK, clickSecond);
 
function clickFirst(e:MouseEvent):void
{
        trace("click first")
}
 
function clickSecond(e:MouseEvent):void
{
        trace("click second")
}

Не выдумывайте, ничего подобного не происходит.

Tr1te 27.04.2010 16:59

У меня второй является ребенком первого.

Волгоградец 27.04.2010 17:02

Если они в одном контейнере (т.е. братья), то верхний перехватит событие (т.е. до нижнего не дойдет. Как и показал dmitriev.
Если они вложены друг в друга, то помогут mouseChildren на родителе или stopPropagation().

mickfallout 27.04.2010 17:10

я думаю Tr1te хочет что-то типа:
Код AS3:

package  {
 
        import flash.display.*
        import flash.events.*
        public class Main extends Sprite {
                public function Main() {
                        super();
                        var sprite1:Sprite = new Sprite();
                        sprite1.graphics.beginFill(0x000000, 1);
                        sprite1.graphics.drawRect(0, 0, 100, 100);
 
                        sprite1.x = 75;
                        sprite1.y = 50;
                        addChild(sprite1);
 
                        var sprite2:Sprite = new Sprite();
                        sprite2.graphics.beginFill(0x0000CC, 1);
                        sprite2.graphics.drawRect(0, 0, 200, 100);
 
                        sprite2.x = 20;
                        sprite2.y = 20;
                        sprite1.addChild(sprite2);
 
                        sprite1.addEventListener(MouseEvent.CLICK, clickHandler);
 
                        function clickHandler(e:MouseEvent):void
                        {
                                if (e.target == sprite1)
                                        trace("1 click");
                                if (e.target == sprite2)
                                        trace("2 click");
                        }
                }
        }
}


Tr1te 27.04.2010 18:08

Спасибо всем большое.

stopPropagation() - помог.


Часовой пояс GMT +4, время: 13:13.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.