root/as3/Thread/trunk/samples/autoShowHide/AutoShowHideThread.as

リビジョン 641, 3.6 kB (コミッタ: yossy, コミット時期: 2 年 前)

Thread: branches/soumen を trunk にマージ

Line 
1 package
2 {
3         import flash.display.InteractiveObject;
4         import flash.events.MouseEvent;
5         import org.libspark.thread.Thread;
6         import org.libspark.thread.threads.tweener.TweenerThread;
7        
8         /**
9          * このスレッドは、「ロールオーバーするとフェードしながら現れて、しばらくマウスを動かさずに放っておくか、
10          * ロールアウトするとフェードしながら消える、よくあるアレ」を実現します。
11          */
12         public class AutoShowHideThread extends Thread
13         {
14                 public function AutoShowHideThread(target:InteractiveObject)
15                 {
16                         _target = target;
17                 }
18                
19                 private var _target:InteractiveObject;
20                 private var _tween:TweenerThread;
21                
22                 override protected function run():void
23                 {
24                         // 予めアルファを 0 にしておきます
25                         _target.alpha = 0;
26                        
27                         // ロールオーバーを待ちます
28                         waitRollover();
29                 }
30                
31                 private function waitRollover():void
32                 {
33                         _tween = null;
34                        
35                         // ロールオーバーするか、(ターゲットの上で)マウスが動いたらフェードインに移行します
36                         event(_target, MouseEvent.ROLL_OVER, fadeIn);
37                         event(_target, MouseEvent.MOUSE_MOVE, fadeIn);
38                 }
39                
40                 private function fadeIn(e:MouseEvent = null):void
41                 {
42                         // トゥイーン時間
43                         var t:Number = 1.0;
44                        
45                         // 現在実行中のトゥイーンがある場合
46                         if (_tween != null) {
47                                 // そのトゥイーンをキャンセルします
48                                 _tween.cancel();
49                                 // 時間を調整します
50                                 t = _tween.time / 1000;
51                         }
52                        
53                         // アルファが 1.0 になるようなトゥイーンを作成します
54                         _tween = new TweenerThread(_target, {alpha: 1.0, time: t});
55                         // トゥイーンを開始します
56                         _tween.start();
57                         // トゥイーンが終わるのを待ちます
58                         _tween.join();
59                        
60                         // トゥイーン中にロールアウトしたらフェードアウトに移行します
61                         event(_target, MouseEvent.ROLL_OUT, fadeOut);
62                         // ロールアウトせずにトゥイーンが終了した場合ロールアウト待ちに移行します
63                         next(waitRollout);
64                 }
65                
66                 private function waitRollout(e:MouseEvent = null):void
67                 {
68                         _tween = null;
69                        
70                         // ロールアウトしたらフェードアウトに移行します
71                         event(_target, MouseEvent.ROLL_OUT, fadeOut);
72                        
73                         // 2 秒待って何も起きなかった場合
74                         sleep(2000);
75                         // 自動的にフェードアウトに移行します
76                         next(fadeOut);
77                        
78                         // ただし、マウスが動いている場合はフェードアウトしないように再びこのメソッドを実行するようにします
79                         event(_target, MouseEvent.MOUSE_MOVE, waitRollout);
80                 }
81                
82                 private function fadeOut(e:MouseEvent = null):void
83                 {
84                         // トゥイーン時間
85                         var t:Number = 1.0;
86                        
87                         // 現在実行中のトゥイーンがある場合
88                         if (_tween != null) {
89                                 // そのトゥイーンをキャンセルします
90                                 _tween.cancel();
91                                 // 時間を調整します
92                                 t = _tween.time / 1000;
93                         }
94                        
95                         // アルファが 0 になるようなトゥイーンを作成します
96                         _tween = new TweenerThread(_target, {alpha: 0, time: t});
97                         // トゥイーンを開始します
98                         _tween.start();
99                         // トゥイーンが終わるのを待ちます
100                         _tween.join();
101                        
102                         // トゥイーン中にロールオーバーしたり
103                         event(_target, MouseEvent.ROLL_OVER, fadeIn);
104                         // マウスが動いたりした場合はフェードインに移行します
105                         event(_target, MouseEvent.MOUSE_MOVE, fadeIn);
106                         // 何事もなくトゥイーンが終了した場合、ロールオーバー待ちに移行します
107                         next(waitRollover);
108                 }
109         }
110 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。