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/

posted @ 2013-06-18 15:02  小小有  阅读(401)  评论(0编辑  收藏  举报