PDA

Volledige versie bekijken : Scrollbar Universele Component Class Voor MovieClips en Textfields


eagle
%Europe/Berlin %755 %2005, 19:07
heb even een class geschreven voor een component, het is bijlange nog niet perfect, graag ideen, suggesties en verbeteringen voor volgende code:

class classes.cof.components.CCScrollPane extends MovieClip {
private var _componentheight:Number;
private var _mcStartPos:Number;
private var _mcEndPos:Number;
private var _scrollposition:Number;
private var _scrollpath;
private var _scrollspeed:Number;
private var _scrollDown:MovieClip;
private var _scrollUp:MovieClip;
private var _scrollBg:MovieClip;
private var _scrollElevator:MovieClip;
private var _nInterval:Number;
[Inspectable(defaultValue=100,type=Number)]
public function set componentheight(a:Number):Void {
_componentheight = a;
}
[Inspectable(defaultValue=1,type=Number)]
public function set scrollspeed(a:Number):Void {
_scrollspeed = a;
}
[Inspectable]
public function set scrollpath(a):Void {
_scrollpath = a;
}
[Inspectable(type=Number)]
public function set mcStartPos(a:Number):Void {
_mcStartPos = a;
}
[Inspectable(type=Number)]
public function set mcEndPos(a:Number):Void {
_mcEndPos = a;
}
private function createChildren():Void {
attachMovie("scrollDown", "_scrollDown", getNextHighestDepth());
attachMovie("scrollUp", "_scrollUp", getNextHighestDepth());
attachMovie("scrollBg", "_scrollBg", getNextHighestDepth());
attachMovie("scrollElevator", "_scrollElevator", getNextHighestDepth());
}
private function arrange():Void {
_scrollUp._y = 0;
_scrollBg._y = _scrollUp._height;
_scrollBg._height = _componentheight-(_scrollUp._height+_scrollDown._height);
_scrollDown._y = _scrollBg._height;
_scrollElevator._y = _scrollBg._y;
}
private function settings():Void {
//scrolldown settings
_scrollDown.onPress = function() {
this._parent._nInterval = setInterval(this._parent, "scrollCC", 10, "down");
};
_scrollDown.onRelease = function() {
clearInterval(this._parent._nInterval);
};
_scrollDown.onReleaseOutside = _scrollDown.onRelease;
//scrollup settings
_scrollUp.onPress = function() {
this._parent._nInterval = setInterval(this._parent, "scrollCC", 10, "up");
};
_scrollUp.onRelease = function() {
clearInterval(this._parent._nInterval);
};
_scrollUp.onReleaseOutside = _scrollUp.onRelease;
//scrollElevator settings
_scrollElevator.onPress = function() {
var limit1:Number = this._parent._scrollBg._y;
var limit2:Number = this._parent._scrollDown._y-this._height;
startDrag(this, false, 0, limit1, 0, limit2);
};
_scrollElevator.onRelease = function() {
stopDrag();
};
}
public function scrollCC(a:String):Void {
var elev_min:Number = _scrollElevator._y-_scrollspeed;
var elev_max:Number = _scrollElevator._y+_scrollElevator._height+_scroll speed;
var _max:Number = _scrollDown._y;
var _min:Number = _scrollBg._y;
if (a == "down") {
if (elev_max<=_max) {
_scrollElevator._y += _scrollspeed;
}
}
if (a == "up") {
if (elev_min>=_min) {
_scrollElevator._y -= _scrollspeed;
}
}
}
private function updateTarget():Void {
trace(_scrollpath);
if (_scrollpath instanceof MovieClip) {
_scrollpath._y = (_mcEndPos-_mcStartPos)*_scrollposition+_mcStartPos;
trace("it s a movieclip");
}
if (_scrollpath instanceof TextField) {
trace("it s a textfield");
_scrollpath.scroll = _scrollpath.maxscroll*_scrollposition;
}
}
private function updateScrollPosition():Void {
this.onEnterFrame = function() {
var y1:Number = _scrollUp._height;
var y2:Number = _scrollBg._height-_scrollElevator._height;
_scrollposition = (_scrollElevator._y-y1)/(y2-y1);
updateTarget();
};
}
public function getScrollPosition():Number {
return _scrollposition;
}
function CCScrollPane() {
createChildren();
arrange();
settings();
updateScrollPosition();
}
}



Gebruik:
maak 5 nieuwe mc's aan,
-scrollup
-scrolldown
-scrollbg
-scrollelevator
-jecomponentzelf

je geeft de 4 eerste de juiste linkage settings mee,
je eigen compont geef je zijn juiste package adres voor zijn class mee(in component definition en in properties)

wanneer je je component grafisch uitgewerkt hebt, de verschillende mc's hebt gemaakt, zet je je component gewoon op de stage, en voer deze codes uit:

als het een textfield is:

mijnComponent.scrollpath = mijnTextField;

als het een mc is:
mijnComponent.scrollpath = mc;
mijnComponent.mcStartPos = mc._y;
mijnComponent.mcEndPos = mc._y+200;