Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   события мыши в TextField (http://www.flasher.ru/forum/showthread.php?t=155383)

alexmihel 04.05.2011 00:45

события мыши в TextField
 
народ, подскажите, пожалуйста, решение: нужно при наведении на ссылку в текстовом поле (TextField либо какой-нибудь компонент) отображать всплывающую подсказку в виде маленькой картинки.

goodguy 04.05.2011 09:51

Вот неплохое решение http://silin.su/#AS3/utils/hint

silin 04.05.2011 10:32

ага, там походу только реализация показа подсказки
если задача определить когда курсор над ссылкой, то есть один давнишний трюк, основанный на отслеживании цвета символа ссылки
Код AS3:

public class Main extends Sprite 
{
        private var label:TextField = new TextField();
        private var hint:Sprite = new Sprite();
        private var checkIndx:int;
        private var onLink:Boolean;
 
        public function Main():void
        {
 
                var style:StyleSheet = new StyleSheet();
                style.setStyle("a", { color:"#0000FF" } );
                style.setStyle("a:hover", { color:"#008000" } );
 
                label.styleSheet = style;
                label.autoSize = TextFieldAutoSize.LEFT;
                label.htmlText = "подсказка на <a href='http://google.com'>ссылке</a>...";
                label.y = 30;
 
                checkIndx = label.text.indexOf("ссылке");//индекс любого символа ссылки
                onLink = false;//flag
 
 
                addEventListener(Event.ENTER_FRAME, onEnterFrame);
                addChild(label);
 
                hint.graphics.beginFill(0xFF8040);
                hint.graphics.drawRect(0, 0, 30, 30);
                hint.x = 80;
        }
 
        private function onEnterFrame(event:Event):void
        {
                var fmt:TextFormat = label.getTextFormat(checkIndx);
                var currState:Boolean = (fmt.color == 0x008000);
                if (currState != onLink)
                {
                        onLink = currState;
                        if (onLink)
                        {
                                addChild(hint);//показываем подсказку
                        }else
                        {
                                removeChild(hint);//прячем
                        }
                }
        }
}


alexmihel 04.05.2011 14:45

Спасибо за ответ! Я немного модифицировал данный код и получил возможность обрабатывать множество ссылок в текстовом поле и выводить спрайт у курсора. Но еще одна задача - как получить значение ссылки (href) на которую мы наводим?

Код AS3:

 
package {
 
 
        import flash.display.Sprite;
        import flash.events.*;
        import flash.text.*;
 
        public class Main extends Sprite {
 
                private var label:TextField = new TextField();
                private var hint:Sprite = new Sprite();
                private var checkIndx:int;
                private var onLink:Boolean;
 
                public function Main():void {
 
                        var style:StyleSheet = new StyleSheet();
                        style.setStyle("a", { color:"#0000FF" } );
                        style.setStyle("a:hover", { color:"#008000" } );
 
                        label.styleSheet = style;
                        label.autoSize = TextFieldAutoSize.LEFT;
                        label.htmlText = "подсказка на <a href='http://google.com'>ссылке</a> и еще одна <a href='http://google.com'>ссылка</a> ";
                        label.y = 30;
 
                        onLink = false;//flag
 
                        trace(checkIndx );
                        label.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove1);
                        addChild(label);
                }
 
                private function addHint(hintX:int, hintY:int, src:String=""):void {
                        hint.graphics.beginFill(0xFF8040);
                        hint.graphics.drawRect(0, 0, 60, 60);
                        hint.x = hintX;
                        hint.y = hintY + 45;
                        addChild(hint);//показываем подсказку
                }
                private function onMouseMove1(event:MouseEvent):void {
                        var fmt:TextFormat = event.target.getTextFormat(event.target.getCharIndexAtPoint(event.localX,event.localY));
                        var currState:Boolean = (fmt.color == 0x008000);
 
                        if (currState != onLink) {
                                onLink = currState;
                                if (onLink) {
                                        addHint(event.localX, event.localY);
                                }else {
                                        removeChild(hint);//прячем
                                }
                        }
 
                trace(event.target.getCharIndexAtPoint(event.localX,event.localY));
 
                }
        }
}


silin 04.05.2011 15:03

fmt.url

alexmihel 04.05.2011 15:54

да, работает, спасибо, выручили!))


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

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