PDA

Volledige versie bekijken : Custom scrollbar resetten?


Coloresque
%Europe/Berlin %678 %2009, 17:16
Hey

Ik ben bezig aan een site waarin de lay-out concreet er zo uit ziet:
een aantal buttons naast elkaar als menu met daaronder een movieclip met scrollbar. In deze movieclip worden verschillende pagina's getoond op verschillende frames, en in deze pagina's wordt er gelinkt naar andere pagina's (bv. 'klik hier voor meer informatie' gaat dan naar een frame in die movieclip waarin meer informatie staat uitgelegd). Alles werkt perfect, de scrollbar scrolt mooi door de movieclip, maar vanaf dat ik klik op zo één van de links, om naar een ander frame in de content movieclip te gaan, blijft de scrollbar en de pagina op dezelfde positie staan als voor ik klikte. Ik zou dus willen dat de pagina en scrollbar weer gewoon naar de top gaan bij elke nieuwe frame die geopend wordt.

Ik vind alleen tutorials die dit behandelen bij components maar mijn scrollbar is dus geen component, het is een geheel van movieclips volgens de tutorial van http://www.kirupa.com/developer/flash8/scrollbar.htm.

Ik hoop dat het duidelijk is... Een deel van de actionscript (van kirupa.com dus):
scrolling = function () {
var scrollHeight:Number = scrollTrack._height;
var contentHeight:Number = contentMain._height;
var scrollFaceHeight:Number = scrollFace._height;
var maskHeight:Number = maskedView._height;
var initPosition:Number = scrollFace._y=scrollTrack._y;
var initContentPos:Number = contentMain._y;
var finalContentPos:Number = maskHeight-contentHeight+initContentPos;
var left:Number = scrollTrack._x;
var top:Number = scrollTrack._y;
var right:Number = scrollTrack._x;
var bottom:Number = scrollTrack._height-scrollFaceHeight+scrollTrack._y;
var dy:Number = 0;
var speed:Number = 10;
var moveVal:Number = (contentHeight-maskHeight)/(scrollHeight-scrollFaceHeight);
var myVar:LoadVars = new LoadVars();

Coloresque
%Europe/Berlin %770 %2009, 19:29
Ik heb al eens geprobeerd met één van de frames een instance naam te geven en dan dit te doen:

frame_instance.onLoad = function(){ this._x=0; this._y=0; }maar zonder succes... iemand?

Midas
%Europe/Berlin %435 %2009, 11:27
Hey Coloresque

Haal alle code uit de functie 'scrolling' omdat je dan alle variabelen nog kan gebruiken buiten de functie. Maak dan de functie 'scrollInit' die de scrollbar reset. Nu kan deze functie ook de variabelen gebruiken van oorspronkelijk de functie 'scrolling'.
var scrollHeight:Number = scrollTrack._height;
var contentHeight:Number = contentMain._height;
var scrollFaceHeight:Number = scrollFace._height;
var maskHeight:Number = maskedView._height;
var initPosition:Number = scrollFace._y = scrollTrack._y;
var initContentPos:Number = contentMain._y;
var finalContentPos:Number = maskHeight - contentHeight + initContentPos;
var left:Number = scrollTrack._x;
var top:Number = scrollTrack._y;
var right:Number = scrollTrack._x;
var bottom:Number = scrollTrack._height - scrollFaceHeight + scrollTrack._y;
var dy:Number = 0;
var speed:Number = 10;
var moveVal:Number = (contentHeight - maskHeight) / (scrollHeight - scrollFaceHeight);

function scrollInit() {
scrollFace._y = initPosition;
contentMain._y = initContentPos;
}

scrollFace.onPress = function() {
var currPos:Number = this._y;
startDrag(this, false, left, top, right, bottom);
this.onMouseMove = function() {
dy = Math.abs(initPosition - this._y);
contentMain._y = Math.round(dy * -1 * moveVal + initContentPos);
};
};
scrollFace.onMouseUp = function() {
stopDrag();
delete this.onMouseMove;
};
btnUp.onPress = function() {
this.onEnterFrame = function() {
if (contentMain._y + speed < maskedView._y) {
if (scrollFace._y <= top) {
scrollFace._y = top;
} else {
scrollFace._y -= speed / moveVal;
}
contentMain._y += speed;
} else {
scrollFace._y = top;
contentMain._y = maskedView._y;
delete this.onEnterFrame;
}
};
};
btnUp.onDragOut = function() {
delete this.onEnterFrame;
};
btnUp.onRelease = function() {
delete this.onEnterFrame;
};
btnDown.onPress = function() {
this.onEnterFrame = function() {
if (contentMain._y - speed > finalContentPos) {
if (scrollFace._y >= bottom) {
scrollFace._y = bottom;
} else {
scrollFace._y += speed / moveVal;
}
contentMain._y -= speed;
} else {
scrollFace._y = bottom;
contentMain._y = finalContentPos;
delete this.onEnterFrame;
}
};
};
btnDown.onRelease = function() {
delete this.onEnterFrame;
};
btnDown.onDragOut = function() {
delete this.onEnterFrame;
};

if (contentHeight < maskHeight) {
scrollFace._visible = false;
btnUp.enabled = false;
btnDown.enabled = false;
} else {
scrollFace._visible = true;
btnUp.enabled = true;
btnDown.enabled = true;
}
Plaats de bovenstaande code alleen op de eerste keyframe en zorg ervoor dat de volgende keyframes deze functie hebben:
scrollInit();

Coloresque
%Europe/Berlin %515 %2009, 13:22
Hartelijk dank voor je antwoord Midas,

ik heb nog een klein vraagje. Mijn tijdslijn ziet er zo uit:

actions
buttons
dragger
scrollbg
mask
- content

Nu, die grote scroll actionscript staat in de layer 'actions', mijn movieclip staat in de layer 'content'. Ik heb op elke layer maar 1 frame, in mijn movieclips heb ik meerdere keyframes. Wanneer je zegt 'plaats bovenstaande code enkel op de eerste keyframe', bedoel je dan de eerste keyframe van mijn movieclip? Want dan werkt de code niet, omdat de scrollbar een niveau hoger zit bij wijze van spreken. Ik had namelijk geprobeerd om die 'grote scroll actionscript' op mijn eerste keyframe te zetten op de tijdslijn in scene 1 en dan op de keyframes van mijn movie die 'scrollInit();' maar dat werkt niet zoals ik al dacht..

Midas
%Europe/Berlin %568 %2009, 14:38
Probeer dan eens op de keyframes in je content MC dit:
_parent.scrollInit();
Of plaats de functie gewoon op je knoppen.

Coloresque
%Europe/Berlin %580 %2009, 14:55
Bedankt! Werkt perfect :)