AS3实现ToolTip效果

AS3核心类中没有ToolTip类,Flex中的ToolTip类没法用在AS3工程中,Aswing的JToolTip不错,不过如果仅仅为了使用这一个类而导入Aswing就不太明智了。由于最近的项目需要用到ToolTip,我就索性自己写了一个,特与大家分享。

package {

    import flash.events.MouseEvent;

    import flash.text.TextField;

    import flash.text.TextFieldAutoSize;

    import flash.text.TextFormat;

    import flash.display.Sprite;

    import flash.display.DisplayObjectContainer;

    import flash.display.InteractiveObject;



    /**

     * 提示文本

     * @author Flying http://www.riafan.com

     */

    public class AS3ToolTip{

        private static var toolTip : TextField;

        private static var format : TextFormat;

        private static var owner :DisplayObjectContainer;

        //tooltip对象是否可用

        public static var enabled : Boolean = true;

        //目标对象数组

        private static var owners : Array = new  Array();

        //文本对象数组

        private static var texts : Array = new Array();

        

        public function AS3ToolTip() {

            

        }

        

        /**

         * 获取/设置提示文本的顶级显示对象

         */

        public static function get root() :DisplayObjectContainer{

            return owner;

        }



        public static function set root(value :DisplayObjectContainer) : void {

            if (owner == null){

                owner = value;

            }

        }

        

        /**

         * 新建一个提示文本

         *

         * @param   owner  要设置提示文本的目标对象

         * @param   text  提示文本的内容

         */

         

        public static function create(owner:InteractiveObject, text: String) : void {

             owners.push(owner);

            texts.push(text);

             owner.addEventListener(MouseEvent.MOUSE_OVER, AS3ToolTip.showToolTip);

            owner.addEventListener(MouseEvent.MOUSE_OUT, AS3ToolTip.hideToolTip);

            

        }

        /**

         * 显示提示文本

         */

         

        private static function showToolTip(e : MouseEvent) : void {

            //初始化动态文本

            toolTip = new TextField();

            toolTip.visible = true;

            toolTip.text = findText(InteractiveObject(e.currentTarget));

            toolTip.background = true;

            toolTip.backgroundColor= 0xFFCC66;

            toolTip.border = true;

            toolTip.borderColor = 0x000000;

            toolTip.multiline = false;

            toolTip.wordWrap = false;

            toolTip.autoSize = TextFieldAutoSize.CENTER;

            toolTip.x = owner.mouseX + 16;    

            toolTip.y = owner.mouseY - 24;

            

            //设置动态文本样式

            format = new TextFormat();

            format.font = "_sans";

            format.leftMargin = 4;

            format.rightMargin = 4;

            format.size = 12;

            toolTip.setTextFormat(format);

            owner.addChild(toolTip);

            

        }

        

        /**

         * 隐藏提示文本

         */



        private static function hideToolTip(e : MouseEvent) : void {

            toolTip.visible = false;  

            owner.removeEventListener(MouseEvent.MOUSE_OVER, showToolTip);

            owner.removeEventListener(MouseEvent.MOUSE_OUT, hideToolTip);  

        }

        

        /**

         * 返回特定文本

         * 

         * @param   target  目标对象

        */

        

        private static function findText(owner:InteractiveObject) : String {

            var index : int = owners.indexOf(owner);

            return texts[index];

        }

    }

}

用静态类实现的,理论上应该比较节约资源。这里用了两个数组传递text参数,算是一个小技巧。AS3ToolTip用法很简单,先设定它的root,再调用其create方法。create方法的owner参数限制为InteractiveObject类型,不过我想已经够用了。

点击此处查看效果,点击此处下载源文件。

转自: http://www.riafan.com/actionscript-3-0-tooltip/

你可能感兴趣的:(tooltip)