Visualizzazione dei risultati da 1 a 2 su 2

Discussione: aiuto per scrollbar

  1. #1

    aiuto per scrollbar

    salve raga, ho realizzato una semplice scrollbar, che in base all'altezza
    del movie da scrollare si ridimensiona il funzionamento è buono, ma presenta
    dei difetti di posizionamento e di verifica delle misure.
    Potete vederne un esempio su http://www.pirosoft.it

    Andate nella sezione products -> intranet e provate a cliccare sulle scritte rosse.
    Praticamente se il movie si alza, e va oltre una certa altezza compare la scrollbar che
    si ridimensiona in base a quanto diviene alto il movie da scrollare.

    Vedo che però le misure non combaciano perfettamente e non capisco perchè!
    mi aiutate?

    il codice è
    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();

  2. #2

    beh nessuno sa aiutarmi? dai ragazzi un po' di aiuto ad un povero programmatore in
    difficoltà!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.