codice:
import flash.filters.ColorMatrixFilter; //importo per utilizzare i filtri
if(barScroll == undefined) barScroll= 0;
if(barListener == undefined) var barListener:Object = new Object();
//mymovie è il movie di riferimento
//setto i valori per lo scrolling
//passo movie che è il riferimento al movie da scrollare poi l'altezza
//e la larghezza massima dell barra
this.setScrollBar = function(scrollbar_h, scrollbar_w, movie){
movie_h = movie._height; //l'altezza del movie da scrollare
movie_y = movie._y; //posizione del movie da scrollare
movie_ys = movie_y; //posizione del movie di riferimento iniziale che uso sull'onenterframe
mybar_minh = 20; //setto l'altezza minima che può avere la barra
//tutti i valori sono basati sull'altezza da scrollare, se la scrollbar è alta 10 e il movie 17 la differenza (7) mi fornirà
//i valori sui quali basarmi
movie_diff = movie_h - scrollbar_h;
//la mia scrollbar è composta da più elementi vettoriali per poter essere scalata
//o alllargata senza deformarsi
//back è losfondo dietro la barra, barsides sono le linee laterali, barbottom il basso
//barlines sono le line centrali
myscrollbar.back._height = scrollbar_h; //setto l'altezza allo sfondo
myscrollbar._width = scrollbar_w; //setto la largezza allo sfondo
//l'altezza della barra è inversamente proporzionale all'altezza del movie se il movie è 2 volte l'altezza della scrollbar
//la barra è la metà, altezzabarra = altezzascrollbar/altezzamovie
resizeval = Math.floor(scrollbar_h*(scrollbar_h/movie_h));
if(resizeval<mybar_minh) resizeval = mybar_minh;
myscrollbar.mybar.barsides._height = resizeval-3;
myscrollbar.mybar.bar._height = resizeval-1;
myscrollbar.mybar.barbottom._y = resizeval-3;
myscrollbar.mybar.barlines._y = (resizeval-9)/2;
//il rapporto fra pixel di scorrimento della bar e pixel di scorrimento del movie è dato dal rapporto
//fra l'eccesso di altezza del movie (movie_diff) e lo spazio rimasto (altezzascrollbar-altezzabarra)
rapp = movie_diff/(scrollbar_h - myscrollbar.mybar._height);
//dragging con valore
myscrollbar.mybar.onPress = function(){
this.startDrag(false, 0, 0, 0, (scrollbar_h - myscrollbar.mybar._height));
barScroll = myscrollbar.mybar._y;
//per l'utilizzo della rotellina
barListener.onMouseWheel = function(delta:Number) {
barScroll -= delta;
if(barScroll<0) barScroll = 0;
if(barScroll>(scrollbar_h - myscrollbar.mybar._height)) barScroll = scrollbar_h - myscrollbar.mybar._height;
myscrollbar.mybar._y = barScroll;
}
barListener.onMouseDown = function () {
if (!myscrollbar.mybar.hitTest(_root._xmouse, _root._ymouse, false)) {
Mouse.removeListener(barListener);
}
if (movie.hitTest(_root._xmouse, _root._ymouse, false)) {
Mouse.removeListener(barListener);
Mouse.addListener(barListener);
}
}
Mouse.addListener(barListener);
}
myscrollbar.mybar.onRelease = myscrollbar.mybar.onReleaseOutside = function(){
this.stopDrag();
barScroll = this._y;
var myElements_array:Array = [1, 0, 0, 0, 20,
0, 1, 0, 0, 20,
0, 0, 1, 0, 20,
0, 0, 0, 1, 0 ];
var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
this.filters = [myColorMatrix_filter];
}
myscrollbar.mybar.onRollOver = function(){
var myElements_array:Array = [1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0 ];
var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
this.filters = [myColorMatrix_filter];
}
myscrollbar.mybar.onRollOut = function(){
var myElements_array:Array = [1, 0, 0, 0, 20,
0, 1, 0, 0, 20,
0, 0, 1, 0, 20,
0, 0, 0, 1, 0 ];
var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
this.filters = [myColorMatrix_filter];
}
//questo mi serve perchè se si ridimensiona il movie cambiano i valori
// e la barra deve essere ridimensionata
myscrollbar.mybar.onEnterFrame = function(){//se si sposta la barra si sposta il movie
movie._y = movie_ys - this._y*rapp;
if(movie._height!=movie_h){
movie_h = movie._height;
movie_y = movie._y;
movie_diff = movie_h - scrollbar_h;
if(movie_diff>0) {myscrollbar._visible = true;}
else {myscrollbar._visible = false;}
resizeval = Math.floor(scrollbar_h*(scrollbar_h/movie_h));
if(resizeval<mybar_minh) resizeval = mybar_minh;
myscrollbar.mybar.barsides._height = resizeval-3;
myscrollbar.mybar.bar._height = resizeval-1;
myscrollbar.mybar.barbottom._y = resizeval-3;
myscrollbar.mybar.barlines._y = (resizeval-9)/2;
rapp = movie_diff/(scrollbar_h - myscrollbar.mybar._height);
if(myscrollbar.mybar._y > (scrollbar_h - myscrollbar.mybar._height))
myscrollbar.mybar._y = (scrollbar_h - myscrollbar.mybar._height);
}
}
if(movie_diff>0){ //se la differenza è maggiore di zero deve funzionare la scrollbar
myscrollbar._visible = true;
}
else { //se la differenza è minore di zero la scrollbar non serve
myscrollbar._visible = false;
}
}
this.setScrollBar(_parent.barh, _parent.barw, _parent.movie);
stop();