收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 3428|回复: 5

[AS3] ToolTip类的升级版(有源码)

[复制链接]
发表于 2009-6-11 17:34:43 | 显示全部楼层 |阅读模式
[AS3]ToolTip类的升级版
原文地址:http://www.klstudio.com/post/198.html
    这次做公司一个项目,发现原来的那个ToolTip类使用起来还是不方便,故我又重新写一个更方便更灵活的ToolTip类,现在把相关源代码也公布出来。
新ToolTip类
  1. package project.do93.pflip.view
  2. {
  3.        
  4.         import flash.accessibility.AccessibilityProperties;
  5.         import flash.display.*;
  6.         import flash.events.*;
  7.         import flash.geom.Point;
  8.         import flash.text.*;
  9.         /**
  10.          * @link kinglong@gmail.com
  11.          * @author Kinglong
  12.          * @version 0.1
  13.          * @since 20090608
  14.          * @playerversion fp9+
  15.          * 热区提示
  16.          */       
  17.         public class ToolTip extends Sprite        {
  18.                 private static var instance:ToolTip = null;
  19.                 private var label:TextField;               
  20.                 private var area:DisplayObject;
  21.                 public function ToolTip() {
  22.                         label = new TextField();
  23.                         label.autoSize = TextFieldAutoSize.LEFT;
  24.                         label.selectable = false;
  25.                         label.multiline = false;
  26.                         label.wordWrap = false;
  27.                         label.defaultTextFormat = new TextFormat("宋体", 12, 0x666666);
  28.                         label.text = "提示信息";
  29.                         label.x = 5;
  30.                         label.y = 2;
  31.                         addChild(label);
  32.                         redraw();
  33.                         visible = false;
  34.                         mouseEnabled = mouseChildren = false;
  35.                 }
  36.                
  37.                 private function redraw() {
  38.                         var w:Number = 10 + label.width;
  39.                         var h:Number = 4 + label.height;                       
  40.                         this.graphics.clear();
  41.                         this.graphics.beginFill(0x000000, 0.4);
  42.                         this.graphics.drawRoundRect(3, 3, w, h, 5, 5);                               
  43.                         this.graphics.moveTo(6, 3 + h);
  44.                         this.graphics.lineTo(12, 3 + h);
  45.                         this.graphics.lineTo(9, 8 + h);
  46.                         this.graphics.lineTo(6, 3 + h);
  47.                         this.graphics.endFill();
  48.                         this.graphics.beginFill(0xffffff);
  49.                         this.graphics.drawRoundRect(0, 0, w, h, 5, 5);
  50.                         this.graphics.moveTo(3, h);
  51.                         this.graphics.lineTo(9, h);
  52.                         this.graphics.lineTo(6, 5 + h);
  53.                         this.graphics.lineTo(3, h);
  54.                         this.graphics.endFill();
  55.                 }
  56.                
  57.                 public static function init(base:DisplayObjectContainer) {
  58.                         if (instance == null) {
  59.                                 instance = new ToolTip();
  60.                                 base.addChild(instance);                               
  61.                         }
  62.                 }
  63.                
  64.                 public static function register(area:DisplayObject, message:String):void {
  65.                         if(instance != null){
  66.                                 var prop:AccessibilityProperties = new AccessibilityProperties();
  67.                                 prop.description = message;
  68.                                 area.accessibilityProperties = prop;
  69.                                 area.addEventListener(MouseEvent.MOUSE_OVER, instance.handler);
  70.                         }
  71.                 }
  72.                
  73.                 public static function unregister(area:DisplayObject):void {
  74.                         if (instance != null) {
  75.                                 area.removeEventListener(MouseEvent.MOUSE_OVER, instance.handler);
  76.                         }
  77.                 }
  78.                
  79.                 public function show(area:DisplayObject):void {
  80.                         this.area = area;
  81.                         this.area.addEventListener(MouseEvent.MOUSE_OUT, this.handler);
  82.                         this.area.addEventListener(MouseEvent.MOUSE_MOVE, this.handler);
  83.                         label.text = area.accessibilityProperties.description;
  84.                         redraw();                       
  85.                 }

  86.                
  87.                 public function hide():void        {
  88.                         this.area.removeEventListener(MouseEvent.MOUSE_OUT, this.handler);
  89.                         this.area.removeEventListener(MouseEvent.MOUSE_MOVE, this.handler);
  90.                         this.area = null;
  91.                         visible = false;
  92.                 }
  93.                
  94.                 public function move(point:Point):void {                         
  95.                         var lp:Point = this.parent.globalToLocal(point);
  96.                         this.x = lp.x - 6;                       
  97.                         this.y = lp.y - label.height - 12;
  98.                         if(!visible){
  99.                                 visible = true;
  100.                         }
  101.                 }
  102.                
  103.                 private function handler(event:MouseEvent):void        {
  104.                         switch(event.type) {
  105.                                 case MouseEvent.MOUSE_OUT:
  106.                                         this.hide();
  107.                                         break;
  108.                                 case MouseEvent.MOUSE_MOVE:
  109.                                         this.move(new Point(event.stageX, event.stageY));                                       
  110.                                         break;
  111.                                 case MouseEvent.MOUSE_OVER:
  112.                                         this.show(event.target as DisplayObject);
  113.                                         this.move(new Point(event.stageX, event.stageY))
  114.                                         break;
  115.                         }
  116.                 }
  117.                
  118.         }
  119. }
复制代码

调用实例
  1. import project.do93.pflip.view.ToolTip;
  2. var base:Sprite = new Sprite();
  3. addChild(base);
  4. var sp:Sprite = new Sprite();
  5. sp.mouseEnabled=sp.mouseChildren=false;
  6. addChild(sp);
  7. //初始化ToolTip;
  8. ToolTip.init(sp);
  9. //与显示元素关联。
  10. ToolTip.register(xxx_mc, "http://www.klstudio.com");
  11. ToolTip.register(btn1, "我是按钮1");
  12. ToolTip.register(btn2, "我是按钮2");
复制代码

演示效果

评分

参与人数 1威望 +2 收起 理由
flash023 + 2 原创内容

查看全部评分

发表于 2009-6-11 17:47:07 | 显示全部楼层
不错,顶一个先。
回复 支持 反对

使用道具 举报

发表于 2009-6-11 18:00:12 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

发表于 2009-6-12 09:13:12 | 显示全部楼层
顶好东西
回复 支持 反对

使用道具 举报

发表于 2009-6-20 04:11:17 | 显示全部楼层
找这个东西很久了,谢谢楼主分享!
补充下:演示效果
文件下载:http://www.klstudio.com/upload/tooltip.rar
回复 支持 反对

使用道具 举报

发表于 2009-6-20 09:20:45 | 显示全部楼层
好东西.谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-7-23 11:20 , Processed in 0.109099 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表