AS3.0实现自定义滚动条(滚动内容可以为Sprite或MovieClip等),修改属性类型即可!
效果演示:
源码:
Scrollbar.as
1 package ui
2 {
3 import flash.display.Sprite;
4 import flash.events.MouseEvent;
5 import flash.events.Event;
6 import ui.ListenManager;
7 import flash.geom.Rectangle;
8
9 public class Scrollbar extends Sprite
10 {
11 public var obj:Sprite;//需进行滚动的对象
12 public var scrollmask:Sprite;//遮罩对象
13 public var scrollheight:Number;//滚动条高度
14 public var scrolltextnum:int;//文本显示行数
15 public var textspeed:int;//文本滚动速度(行/像素)
16 public var Scroll:Sprite;//自定义滚动条对象
17 public var bar:Sprite;//滑块
18 public var up:Sprite;//向上按钮
19 public var down:Sprite;//向下按钮
20 public var bg:Sprite;//滑槽
21 public var displayobject:*;//接受stage,必须传入
22 public var num:int;//计算滑块高度所用
23
24 private var bars:Number;//滑块可滑动距离
25 private var rect:Rectangle;//滑块可拖动范围
26 private var i:int = 0;
27 private var n:Number;
28 private var listenmanager:ListenManager = new ListenManager();///监听管理器
29 ////构造器函数/////
30 public function Scrollbar():void
31 {
32 }
33 /////初始化函数/////
34 public function init():void
35 {
36 if (checkhide())
37 {
38 addEventListeners();
39 }
40 else
41 {
42 bar.visible = false;
43 }
44 setxy();
45 }
46 ///判断是否显示滚动条等///
47 private function checkhide():Boolean
48 {
49 if (Scroll != null)
50 {
51 if (obj.height <= scrollmask.height)
52 {
53 return false;
54 }
55 return true;
56 }
57 return false;
58 }
59 ///设置滚动条高度,对象遮罩等////
60 private function setxy():void
61 {
62 up.y = 1;
63 bg.y = up.height;
64 bar.x = 1.2;
65 bar.y = bg.y;
66 if (bar.height >= 10)
67 {
68 n = (obj.height - scrollmask.height)/(num+20);
69 bar.height = scrollmask.height - (obj.height - scrollmask.height)/n;
70 }
71 bg.height = scrollheight;
72 down.y = bg.y + bg.height;
73 bars = bg.height - bar.height;
74 obj.mask = scrollmask;
75 rect = new Rectangle(bar.x,bg.y,0,bg.height - bar.height);
76 }
77 ///当被滚动对象更新时,而需要改变滚动条状态,调用此方法///
78 public function update(num:int):void
79 {
80 if (checkhide())
81 {
82 i++;
83 if (bar.height >= 10)
84 {
85 n = (obj.height - scrollmask.height)/(num+20);
86 bar.height = scrollmask.height - (obj.height - scrollmask.height)/n;
87 }
88 bar.y = bg.y + bg.height - bar.height;
89 bar.y += bars * textspeed /(obj.height - scrollmask.height);
90 obj.y = scrollmask.y - obj.height + scrollmask.height;
91 objrun(textspeed);
92 updatebar();
93 bars = bg.height - bar.height;
94 rect = new Rectangle(bar.x,bg.y,0,bg.height - bar.height);
95 if (i == 1)
96 {
97 bar.visible = true;
98 addEventListeners();
99 }
100 }
101 }
102 ///为滚动条添加监听事件////
103 private function addEventListeners():void
104 {
105 listenmanager.fcn_add(bar,MouseEvent.MOUSE_DOWN,barclick);
106 listenmanager.fcn_add(bar,MouseEvent.MOUSE_UP,barup);
107 listenmanager.fcn_add(displayobject,MouseEvent.MOUSE_UP,barup);
108 listenmanager.fcn_add(up,MouseEvent.MOUSE_DOWN,upclick);
109 listenmanager.fcn_add(down,MouseEvent.MOUSE_DOWN,downclick);
110 listenmanager.fcn_add(Scroll,MouseEvent.MOUSE_WHEEL,mousewheel);
111 listenmanager.fcn_add(obj,MouseEvent.MOUSE_WHEEL,mousewheel);
112 }
113 ///鼠标点击滑块方法///;
114 private function barclick(evt:MouseEvent):void
115 {
116 bar.startDrag(false,rect);
117 listenmanager.fcn_add(bar,Event.ENTER_FRAME,bar_enter_frame);
118 }
119 ///鼠标点击滑块释放方法///;
120 private function barup(evt:MouseEvent):void
121 {
122 bar.stopDrag();
123 delevent();
124 }
125 ///鼠标点击向上按钮方法///
126 private function upclick(evt:MouseEvent):void
127 {
128 if (checkbar())
129 {
130 bar.y -= bars * textspeed /(obj.height-scrollmask.height);//滑块移动的距离=滚动对象滚动的像素*滑块可移动的总距离/(被滚动对象的高度-遮罩的高度(即显示范围的高度))
131 objrun(0-textspeed);
132 //调用方法移动对象;
133 updatebar();//校正滑块位置
134 }
135 }
136 ///鼠标点击向下按钮方法///
137 private function downclick(evt:MouseEvent):void
138 {
139 if (checkbar())
140 {
141 bar.y += bars * textspeed /(obj.height - scrollmask.height);
142 objrun(textspeed);
143 updatebar();
144 }
145 }
146 ///鼠标滑轮事件///
147 private function mousewheel(evt:MouseEvent):void
148 {
149 if (evt.delta > 0)
150 {
151 if (checkbar())
152 {
153 bar.y -= bars * textspeed /(obj.height - scrollmask.height);
154 objrun(-textspeed);
155 updatebar();
156 }
157 }
158 else
159 {
160 if (checkbar())
161 {
162 bar.y += bars * textspeed /(obj.height - scrollmask.height);
163 objrun(textspeed);
164 updatebar();
165 }
166 }
167 }
168 private function bar_enter_frame(evt:Event):void
169 {
170 obj.y = scrollmask.y - (bar.y - bg.y)*(obj.height - scrollmask.height)/bars;
171 if (obj.y > scrollmask.y)
172 {
173 obj.y = scrollmask.y;
174 }
175 else if (obj.y < (scrollmask.y - obj.height + scrollmask.height))
176 {
177 obj.y = scrollmask.y - obj.height + scrollmask.height;
178 }
179 }
180 private function objrun(i:Number):void
181 {
182 obj.y -= i;
183 if (obj.y > scrollmask.y)
184 {
185 obj.y = scrollmask.y;
186 }
187 else if (obj.y < (scrollmask.y - obj.height + scrollmask.height))
188 {
189 obj.y = scrollmask.y - obj.height + scrollmask.height;
190 }
191 }
192 private function checkbar():Boolean
193 {
194 if (bar.y >= bg.y && bar.y <= (bars + bg.y))
195 {
196 return true;
197 }
198 return false;
199 }
200 ///删除卸载事件侦听///
201 private function updatebar():void
202 {
203 if (bar.y < bg.y)
204 {
205 bar.y = bg.y;
206 }
207 else if (bar.y >(bg.y + bg.height - bar.height))
208 {
209 bar.y = bg.y + bg.height - bar.height;
210 }
211 }
212 private function delevent():void
213 {
214 listenmanager.fcn_del(bar,Event.ENTER_FRAME,bar_enter_frame);
215 }
216 }
217 }
2 {
3 import flash.display.Sprite;
4 import flash.events.MouseEvent;
5 import flash.events.Event;
6 import ui.ListenManager;
7 import flash.geom.Rectangle;
8
9 public class Scrollbar extends Sprite
10 {
11 public var obj:Sprite;//需进行滚动的对象
12 public var scrollmask:Sprite;//遮罩对象
13 public var scrollheight:Number;//滚动条高度
14 public var scrolltextnum:int;//文本显示行数
15 public var textspeed:int;//文本滚动速度(行/像素)
16 public var Scroll:Sprite;//自定义滚动条对象
17 public var bar:Sprite;//滑块
18 public var up:Sprite;//向上按钮
19 public var down:Sprite;//向下按钮
20 public var bg:Sprite;//滑槽
21 public var displayobject:*;//接受stage,必须传入
22 public var num:int;//计算滑块高度所用
23
24 private var bars:Number;//滑块可滑动距离
25 private var rect:Rectangle;//滑块可拖动范围
26 private var i:int = 0;
27 private var n:Number;
28 private var listenmanager:ListenManager = new ListenManager();///监听管理器
29 ////构造器函数/////
30 public function Scrollbar():void
31 {
32 }
33 /////初始化函数/////
34 public function init():void
35 {
36 if (checkhide())
37 {
38 addEventListeners();
39 }
40 else
41 {
42 bar.visible = false;
43 }
44 setxy();
45 }
46 ///判断是否显示滚动条等///
47 private function checkhide():Boolean
48 {
49 if (Scroll != null)
50 {
51 if (obj.height <= scrollmask.height)
52 {
53 return false;
54 }
55 return true;
56 }
57 return false;
58 }
59 ///设置滚动条高度,对象遮罩等////
60 private function setxy():void
61 {
62 up.y = 1;
63 bg.y = up.height;
64 bar.x = 1.2;
65 bar.y = bg.y;
66 if (bar.height >= 10)
67 {
68 n = (obj.height - scrollmask.height)/(num+20);
69 bar.height = scrollmask.height - (obj.height - scrollmask.height)/n;
70 }
71 bg.height = scrollheight;
72 down.y = bg.y + bg.height;
73 bars = bg.height - bar.height;
74 obj.mask = scrollmask;
75 rect = new Rectangle(bar.x,bg.y,0,bg.height - bar.height);
76 }
77 ///当被滚动对象更新时,而需要改变滚动条状态,调用此方法///
78 public function update(num:int):void
79 {
80 if (checkhide())
81 {
82 i++;
83 if (bar.height >= 10)
84 {
85 n = (obj.height - scrollmask.height)/(num+20);
86 bar.height = scrollmask.height - (obj.height - scrollmask.height)/n;
87 }
88 bar.y = bg.y + bg.height - bar.height;
89 bar.y += bars * textspeed /(obj.height - scrollmask.height);
90 obj.y = scrollmask.y - obj.height + scrollmask.height;
91 objrun(textspeed);
92 updatebar();
93 bars = bg.height - bar.height;
94 rect = new Rectangle(bar.x,bg.y,0,bg.height - bar.height);
95 if (i == 1)
96 {
97 bar.visible = true;
98 addEventListeners();
99 }
100 }
101 }
102 ///为滚动条添加监听事件////
103 private function addEventListeners():void
104 {
105 listenmanager.fcn_add(bar,MouseEvent.MOUSE_DOWN,barclick);
106 listenmanager.fcn_add(bar,MouseEvent.MOUSE_UP,barup);
107 listenmanager.fcn_add(displayobject,MouseEvent.MOUSE_UP,barup);
108 listenmanager.fcn_add(up,MouseEvent.MOUSE_DOWN,upclick);
109 listenmanager.fcn_add(down,MouseEvent.MOUSE_DOWN,downclick);
110 listenmanager.fcn_add(Scroll,MouseEvent.MOUSE_WHEEL,mousewheel);
111 listenmanager.fcn_add(obj,MouseEvent.MOUSE_WHEEL,mousewheel);
112 }
113 ///鼠标点击滑块方法///;
114 private function barclick(evt:MouseEvent):void
115 {
116 bar.startDrag(false,rect);
117 listenmanager.fcn_add(bar,Event.ENTER_FRAME,bar_enter_frame);
118 }
119 ///鼠标点击滑块释放方法///;
120 private function barup(evt:MouseEvent):void
121 {
122 bar.stopDrag();
123 delevent();
124 }
125 ///鼠标点击向上按钮方法///
126 private function upclick(evt:MouseEvent):void
127 {
128 if (checkbar())
129 {
130 bar.y -= bars * textspeed /(obj.height-scrollmask.height);//滑块移动的距离=滚动对象滚动的像素*滑块可移动的总距离/(被滚动对象的高度-遮罩的高度(即显示范围的高度))
131 objrun(0-textspeed);
132 //调用方法移动对象;
133 updatebar();//校正滑块位置
134 }
135 }
136 ///鼠标点击向下按钮方法///
137 private function downclick(evt:MouseEvent):void
138 {
139 if (checkbar())
140 {
141 bar.y += bars * textspeed /(obj.height - scrollmask.height);
142 objrun(textspeed);
143 updatebar();
144 }
145 }
146 ///鼠标滑轮事件///
147 private function mousewheel(evt:MouseEvent):void
148 {
149 if (evt.delta > 0)
150 {
151 if (checkbar())
152 {
153 bar.y -= bars * textspeed /(obj.height - scrollmask.height);
154 objrun(-textspeed);
155 updatebar();
156 }
157 }
158 else
159 {
160 if (checkbar())
161 {
162 bar.y += bars * textspeed /(obj.height - scrollmask.height);
163 objrun(textspeed);
164 updatebar();
165 }
166 }
167 }
168 private function bar_enter_frame(evt:Event):void
169 {
170 obj.y = scrollmask.y - (bar.y - bg.y)*(obj.height - scrollmask.height)/bars;
171 if (obj.y > scrollmask.y)
172 {
173 obj.y = scrollmask.y;
174 }
175 else if (obj.y < (scrollmask.y - obj.height + scrollmask.height))
176 {
177 obj.y = scrollmask.y - obj.height + scrollmask.height;
178 }
179 }
180 private function objrun(i:Number):void
181 {
182 obj.y -= i;
183 if (obj.y > scrollmask.y)
184 {
185 obj.y = scrollmask.y;
186 }
187 else if (obj.y < (scrollmask.y - obj.height + scrollmask.height))
188 {
189 obj.y = scrollmask.y - obj.height + scrollmask.height;
190 }
191 }
192 private function checkbar():Boolean
193 {
194 if (bar.y >= bg.y && bar.y <= (bars + bg.y))
195 {
196 return true;
197 }
198 return false;
199 }
200 ///删除卸载事件侦听///
201 private function updatebar():void
202 {
203 if (bar.y < bg.y)
204 {
205 bar.y = bg.y;
206 }
207 else if (bar.y >(bg.y + bg.height - bar.height))
208 {
209 bar.y = bg.y + bg.height - bar.height;
210 }
211 }
212 private function delevent():void
213 {
214 listenmanager.fcn_del(bar,Event.ENTER_FRAME,bar_enter_frame);
215 }
216 }
217 }
ListenManager.as
1 package ui
2 {
3 import flash.display.Sprite;
4 public class ListenManager extends Sprite
5 {
6 public function ListenManager()
7 {
8
9 }
10 public function fcn_add(obj:*,_type:String,fcn:Function):void
11 {
12 obj.addEventListener(_type,fcn);
13 }
14 public function fcn_del(obj:*,_type:String,fcn:Function):void
15 {
16 obj.removeEventListener(_type,fcn);
17 }
18 }
19 }
2 {
3 import flash.display.Sprite;
4 public class ListenManager extends Sprite
5 {
6 public function ListenManager()
7 {
8
9 }
10 public function fcn_add(obj:*,_type:String,fcn:Function):void
11 {
12 obj.addEventListener(_type,fcn);
13 }
14 public function fcn_del(obj:*,_type:String,fcn:Function):void
15 {
16 obj.removeEventListener(_type,fcn);
17 }
18 }
19 }
loader.as
1 package ui
2 {
3 import flash.display.Loader;
4 public class loader extends Loader
5 {
6 private var Name:String;
7 public function loader():void
8 {
9 }
10 public function get Names():String
11 {
12 return Name;
13 }
14 public function set Names(myname:String):void
15 {
16 Name = myname;
17 }
18 }
19 }
2 {
3 import flash.display.Loader;
4 public class loader extends Loader
5 {
6 private var Name:String;
7 public function loader():void
8 {
9 }
10 public function get Names():String
11 {
12 return Name;
13 }
14 public function set Names(myname:String):void
15 {
16 Name = myname;
17 }
18 }
19 }
simple.as
1 package ui
2 {
3 import flash.display.Sprite;
4 import flash.display.SimpleButton;
5 import flash.text.TextField;
6 import flash.text.TextFormat;
7 import flash.text.TextFieldAutoSize;
8
9 public class simple extends Sprite
10 {
11 private var btnw:Number;
12 private var btnh:Number;
13 private var downcolor:uint;
14 private var upcolor:uint;
15 private var overcolor:uint;
16 private var lineStly:Boolean;
17 public function simple():void
18 {
19
20 }
21 public function getsimplebtn(str:String,btnw:Number = 50,btnh:Number = 30,downcolor:uint = 0x990066,upcolor:uint = 0xffffff,overcolor:uint = 0x666666,lineStly:Boolean = false):SimpleButton
22 {
23 this.name = str;
24 this.btnw = btnw;
25 this.btnh = btnh;
26 this.downcolor = downcolor;
27 this.upcolor = upcolor;
28 this.overcolor = overcolor;
29 this.lineStly = lineStly;
30 var btn:SimpleButton = new SimpleButton();
31 btn.downState = downbtn();
32 btn.upState = upbtn();
33 btn.overState = overbtn();
34 btn.hitTestState = hitbtn();
35 return btn;
36 }
37 private function hitbtn():Sprite
38 {
39 var sprite:Sprite = new Sprite();
40 sprite.graphics.beginFill(upcolor);
41 sprite.graphics.drawRect(0,0,btnw,btnh);
42 sprite.graphics.endFill();
43 return sprite;
44 }
45 private function downbtn():Sprite
46 {
47 var txt:TextField = txtstr(this.name);
48 var sprite:Sprite = DrawSprite(1);
49 sprite.addChild(txt);
50 return sprite;
51 }
52 private function upbtn():Sprite
53 {
54 var txt:TextField = txtstr(this.name);
55 var sprite:Sprite = DrawSprite(0);
56 sprite.addChild(txt);
57 return sprite;
58 }
59 private function overbtn():Sprite
60 {
61 var txt:TextField = txtstr(this.name);
62 var sprite:Sprite = DrawSprite(2);
63 sprite.addChild(txt);
64 return sprite;
65 }
66 private function txtstr(str:String):TextField
67 {
68 var txt:TextField = new TextField();
69 var format:TextFormat = new TextFormat();
70 format.font = "Verdana";
71 format.size = 12;
72 txt.autoSize = TextFieldAutoSize.LEFT;
73 txt.text = str;
74 txt.setTextFormat(format);
75 return txt;
76 }
77 private function DrawSprite(n:int):Sprite
78 {
79 var sprite:Sprite = new Sprite();
80 if (n == 0)
81 {
82 sprite.graphics.beginFill(upcolor);
83 }
84 else if (n == 1)
85 {
86 sprite.graphics.beginFill(downcolor);
87 }
88 else if (n == 2)
89 {
90 sprite.graphics.beginFill(overcolor);
91 }
92 if(lineStly)
93 {
94 sprite.graphics.lineStyle(1,0x660099);
95 }
96 sprite.graphics.drawRect(0,0,btnw,btnh);
97 sprite.graphics.endFill();
98 return sprite;
99 }
100 }
101 }
2 {
3 import flash.display.Sprite;
4 import flash.display.SimpleButton;
5 import flash.text.TextField;
6 import flash.text.TextFormat;
7 import flash.text.TextFieldAutoSize;
8
9 public class simple extends Sprite
10 {
11 private var btnw:Number;
12 private var btnh:Number;
13 private var downcolor:uint;
14 private var upcolor:uint;
15 private var overcolor:uint;
16 private var lineStly:Boolean;
17 public function simple():void
18 {
19
20 }
21 public function getsimplebtn(str:String,btnw:Number = 50,btnh:Number = 30,downcolor:uint = 0x990066,upcolor:uint = 0xffffff,overcolor:uint = 0x666666,lineStly:Boolean = false):SimpleButton
22 {
23 this.name = str;
24 this.btnw = btnw;
25 this.btnh = btnh;
26 this.downcolor = downcolor;
27 this.upcolor = upcolor;
28 this.overcolor = overcolor;
29 this.lineStly = lineStly;
30 var btn:SimpleButton = new SimpleButton();
31 btn.downState = downbtn();
32 btn.upState = upbtn();
33 btn.overState = overbtn();
34 btn.hitTestState = hitbtn();
35 return btn;
36 }
37 private function hitbtn():Sprite
38 {
39 var sprite:Sprite = new Sprite();
40 sprite.graphics.beginFill(upcolor);
41 sprite.graphics.drawRect(0,0,btnw,btnh);
42 sprite.graphics.endFill();
43 return sprite;
44 }
45 private function downbtn():Sprite
46 {
47 var txt:TextField = txtstr(this.name);
48 var sprite:Sprite = DrawSprite(1);
49 sprite.addChild(txt);
50 return sprite;
51 }
52 private function upbtn():Sprite
53 {
54 var txt:TextField = txtstr(this.name);
55 var sprite:Sprite = DrawSprite(0);
56 sprite.addChild(txt);
57 return sprite;
58 }
59 private function overbtn():Sprite
60 {
61 var txt:TextField = txtstr(this.name);
62 var sprite:Sprite = DrawSprite(2);
63 sprite.addChild(txt);
64 return sprite;
65 }
66 private function txtstr(str:String):TextField
67 {
68 var txt:TextField = new TextField();
69 var format:TextFormat = new TextFormat();
70 format.font = "Verdana";
71 format.size = 12;
72 txt.autoSize = TextFieldAutoSize.LEFT;
73 txt.text = str;
74 txt.setTextFormat(format);
75 return txt;
76 }
77 private function DrawSprite(n:int):Sprite
78 {
79 var sprite:Sprite = new Sprite();
80 if (n == 0)
81 {
82 sprite.graphics.beginFill(upcolor);
83 }
84 else if (n == 1)
85 {
86 sprite.graphics.beginFill(downcolor);
87 }
88 else if (n == 2)
89 {
90 sprite.graphics.beginFill(overcolor);
91 }
92 if(lineStly)
93 {
94 sprite.graphics.lineStyle(1,0x660099);
95 }
96 sprite.graphics.drawRect(0,0,btnw,btnh);
97 sprite.graphics.endFill();
98 return sprite;
99 }
100 }
101 }
文档类:Main.as
1 package
2 {
3 import flash.display.Sprite;
4 import ui.simple;
5 import ui.Scrollbar;
6 import flash.display.SimpleButton;
7 import flash.events.MouseEvent;
8 import flash.display.Shape;
9 import flash.net.URLLoader;
10 import flash.events.Event;
11 import flash.net.URLRequest;
12 import ui.loader;
13 import flash.display.Bitmap;
14 import flash.text.TextField;
15
16 public class Main extends Sprite
17 {
18 private var backbox:Sprite = new Sprite();
19 private var sprite:Sprite = new Sprite();
20 private var scrollcont:Sprite = new Sprite();
21 private var i:int = 0;
22 private var j:int = -1;
23 private var num:int;
24 private var bg:Sprite = new Sprite();
25 private var bar:Sprite = new Sprite();
26 private var up:Sprite = new Sprite();
27 private var down:Sprite = new Sprite();
28 private var listscroll:Scrollbar = new Scrollbar();
29 public function Main():void
30 {
31 init();
32 }
33 private function init():void
34 {
35 var urlloader:URLLoader = new URLLoader();
36 urlloader.addEventListener(Event.COMPLETE,com);
37 urlloader.load(new URLRequest("https://files.cnblogs.com/zhoujunfeng2011/Pictures/data.xml"));
38 }
39 private function com(evt:Event):void
40 {
41 var myxml:XML = new XML(evt.target.data);
42 num = myxml.child("pic").length();
43 for (var i:int =0; i<num; i++)
44 {
45 var myloader:loader = new loader();
46 myloader.contentLoaderInfo.addEventListener(Event.COMPLETE,piccom);
47 myloader.load(new URLRequest(myxml.child("pic")[i].@url));
48 myloader.Names = myxml.child("pic")[i]. @ name;
49 }
50 }
51 private function piccom(evt:Event):void
52 {
53 j++;
54 var myloader:loader = loader(evt.target.loader);
55 var bitmap:Bitmap = Bitmap(myloader.content);
56 var sprite:Sprite = new Sprite();
57 sprite.addChild(bitmap);
58 switch (myloader.Names)
59 {
60 case "滑块" :
61 bar = sprite;
62 break;
63 case "滑槽" :
64 bg = sprite;
65 break;
66 case "向上" :
67 up = sprite;
68 break;
69 case "向下" :
70 down = sprite;
71 break;
72 }
73 if (j == num-1)
74 {
75 uiinit();
76 }
77 }
78 private function uiinit():void
79 {
80 var btn:simple = new simple();
81 var spmask:Sprite = new Sprite();
82 var Test_btn:SimpleButton;
83 backbox.graphics.beginFill(0xffffff);
84 backbox.graphics.lineStyle(1,0x660099);
85 backbox.graphics.drawRect(0,0,200,241);
86 backbox.graphics.endFill();
87 backbox.y = 10;
88 addChild(backbox);
89 scrollcont.x = backbox.width - 14;
90 scrollcont.y = backbox.y;
91 addChild(scrollcont);
92 down.y = scrollcont.y;
93 scrollcont.addChild(down);
94 scrollcont.addChild(bg);
95 scrollcont.addChild(up);
96 scrollcont.addChild(bar);
97 spmask.graphics.beginFill(0x000000);
98 spmask.graphics.drawRect(0,0,backbox.width,backbox.height);
99 spmask.graphics.endFill();
100 backbox.addChild(sprite);
101 backbox.addChild(spmask);
102 Test_btn = btn.getsimplebtn("点击添加",60,30,0xff00cc,0xcc00cc,0x9900cc);
103 Test_btn.x = 65;
104 Test_btn.y = backbox.height + 15;
105 this.addChild(Test_btn);
106 for (i; i< 120; i++)
107 {
108 var sbtn:simple = new simple();
109 var sp:SimpleButton;
110 var str:String = i + 1 + " this is Testing!";
111 sp = sbtn.getsimplebtn(str,185,20,0x990099,0x66ffff,0x99ffff,true);
112 sp.x = 1;
113 sp.y = i * 20;
114 sprite.addChild(sp);
115 }
116 listscroll.displayobject = this.stage;
117 listscroll.obj = sprite;
118 listscroll.scrollmask = spmask;
119 listscroll.textspeed = 20;
120 listscroll.Scroll = scrollcont;
121 listscroll.scrollheight = 212;
122 listscroll.up = up;
123 listscroll.down = down;
124 listscroll.bg = bg;
125 listscroll.bar = bar;
126 listscroll.num = i;
127 listscroll.init();
128 Test_btn.addEventListener(MouseEvent.CLICK,Testbtn_click);
129 }
130 private function Testbtn_click(evt:MouseEvent):void
131 {
132 var sbtn:simple = new simple();
133 var sp:SimpleButton;
134 var str:String = i + 1 + " this is Testing!";
135 sp = sbtn.getsimplebtn(str,185,20,0x990099,0x66ffff,0x99ffff,true);
136 sp.x = 1;
137 sp.y = i * 20;
138 sprite.addChild(sp);
139 listscroll.update(i);
140 i++;
141 }
142 }
143 }
2 {
3 import flash.display.Sprite;
4 import ui.simple;
5 import ui.Scrollbar;
6 import flash.display.SimpleButton;
7 import flash.events.MouseEvent;
8 import flash.display.Shape;
9 import flash.net.URLLoader;
10 import flash.events.Event;
11 import flash.net.URLRequest;
12 import ui.loader;
13 import flash.display.Bitmap;
14 import flash.text.TextField;
15
16 public class Main extends Sprite
17 {
18 private var backbox:Sprite = new Sprite();
19 private var sprite:Sprite = new Sprite();
20 private var scrollcont:Sprite = new Sprite();
21 private var i:int = 0;
22 private var j:int = -1;
23 private var num:int;
24 private var bg:Sprite = new Sprite();
25 private var bar:Sprite = new Sprite();
26 private var up:Sprite = new Sprite();
27 private var down:Sprite = new Sprite();
28 private var listscroll:Scrollbar = new Scrollbar();
29 public function Main():void
30 {
31 init();
32 }
33 private function init():void
34 {
35 var urlloader:URLLoader = new URLLoader();
36 urlloader.addEventListener(Event.COMPLETE,com);
37 urlloader.load(new URLRequest("https://files.cnblogs.com/zhoujunfeng2011/Pictures/data.xml"));
38 }
39 private function com(evt:Event):void
40 {
41 var myxml:XML = new XML(evt.target.data);
42 num = myxml.child("pic").length();
43 for (var i:int =0; i<num; i++)
44 {
45 var myloader:loader = new loader();
46 myloader.contentLoaderInfo.addEventListener(Event.COMPLETE,piccom);
47 myloader.load(new URLRequest(myxml.child("pic")[i].@url));
48 myloader.Names = myxml.child("pic")[i]. @ name;
49 }
50 }
51 private function piccom(evt:Event):void
52 {
53 j++;
54 var myloader:loader = loader(evt.target.loader);
55 var bitmap:Bitmap = Bitmap(myloader.content);
56 var sprite:Sprite = new Sprite();
57 sprite.addChild(bitmap);
58 switch (myloader.Names)
59 {
60 case "滑块" :
61 bar = sprite;
62 break;
63 case "滑槽" :
64 bg = sprite;
65 break;
66 case "向上" :
67 up = sprite;
68 break;
69 case "向下" :
70 down = sprite;
71 break;
72 }
73 if (j == num-1)
74 {
75 uiinit();
76 }
77 }
78 private function uiinit():void
79 {
80 var btn:simple = new simple();
81 var spmask:Sprite = new Sprite();
82 var Test_btn:SimpleButton;
83 backbox.graphics.beginFill(0xffffff);
84 backbox.graphics.lineStyle(1,0x660099);
85 backbox.graphics.drawRect(0,0,200,241);
86 backbox.graphics.endFill();
87 backbox.y = 10;
88 addChild(backbox);
89 scrollcont.x = backbox.width - 14;
90 scrollcont.y = backbox.y;
91 addChild(scrollcont);
92 down.y = scrollcont.y;
93 scrollcont.addChild(down);
94 scrollcont.addChild(bg);
95 scrollcont.addChild(up);
96 scrollcont.addChild(bar);
97 spmask.graphics.beginFill(0x000000);
98 spmask.graphics.drawRect(0,0,backbox.width,backbox.height);
99 spmask.graphics.endFill();
100 backbox.addChild(sprite);
101 backbox.addChild(spmask);
102 Test_btn = btn.getsimplebtn("点击添加",60,30,0xff00cc,0xcc00cc,0x9900cc);
103 Test_btn.x = 65;
104 Test_btn.y = backbox.height + 15;
105 this.addChild(Test_btn);
106 for (i; i< 120; i++)
107 {
108 var sbtn:simple = new simple();
109 var sp:SimpleButton;
110 var str:String = i + 1 + " this is Testing!";
111 sp = sbtn.getsimplebtn(str,185,20,0x990099,0x66ffff,0x99ffff,true);
112 sp.x = 1;
113 sp.y = i * 20;
114 sprite.addChild(sp);
115 }
116 listscroll.displayobject = this.stage;
117 listscroll.obj = sprite;
118 listscroll.scrollmask = spmask;
119 listscroll.textspeed = 20;
120 listscroll.Scroll = scrollcont;
121 listscroll.scrollheight = 212;
122 listscroll.up = up;
123 listscroll.down = down;
124 listscroll.bg = bg;
125 listscroll.bar = bar;
126 listscroll.num = i;
127 listscroll.init();
128 Test_btn.addEventListener(MouseEvent.CLICK,Testbtn_click);
129 }
130 private function Testbtn_click(evt:MouseEvent):void
131 {
132 var sbtn:simple = new simple();
133 var sp:SimpleButton;
134 var str:String = i + 1 + " this is Testing!";
135 sp = sbtn.getsimplebtn(str,185,20,0x990099,0x66ffff,0x99ffff,true);
136 sp.x = 1;
137 sp.y = i * 20;
138 sprite.addChild(sp);
139 listscroll.update(i);
140 i++;
141 }
142 }
143 }
为图方便所以使用了SimpleButton类型作为列表中的内容,,有些算法都是从网上收集起来的,不过稍改了下,希望会对你有帮助,代码有点乱,看了后希望点评下,谢谢!最后加上XML内容:
1 <?xml version="1.0" encoding="utf-8"?>
2 <data>
3 <pic name="滑槽" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/bg.png"/>
4 <pic name="向上" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/up.png"/>
5 <pic name="向下" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/down.png"/>
6 <pic name="滑块" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/bar.png"/>
7 </data>
2 <data>
3 <pic name="滑槽" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/bg.png"/>
4 <pic name="向上" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/up.png"/>
5 <pic name="向下" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/down.png"/>
6 <pic name="滑块" url="https://files.cnblogs.com/zhoujunfeng2011/Pictures/bar.png"/>
7 </data>