Ciao a tutti
beh c'è voluta quasi tutta la giornata ma lo scroll è finito :-)
inevitabile dire che ho preso diversi spunti dai tutorial di flep :-)
ecco il risultato
ScrollY
file zip al link
ScrollY.zip
il file è da considerare come studio quindi se notate orrori sarei contento di eventuali notifiche
ehehehehehe
ah dimenticavo all'interno della classe vi è una var pubblica
attivo_blur:Boolean
che se valorizzata a true lo scroll avviene con effetto blur
di seguito il codice per una visione di tutta la comunità
ciao a tutti e buono studio ;-)
Code:
package
{
import flash.display.MovieClip
import flash.events.*;
import flash.geom.Rectangle;
import flash.filters.BitmapFilterQuality;
import flash.filters.BlurFilter;
public class ScrollY extends MovieClip
{
public var mc_root:MovieClip;
public var mc_cursore:MovieClip;
public var mc_barra:MovieClip;
public var mc_scroll:MovieClip;
public var mc_maschera:MovieClip;
public var btn_scroll_up:MovieClip;
public var btn_scroll_down:MovieClip;
public var tolleranza_y:int;
public var speed:int;
public var passo_scroll:int;
public var attivo_blur:Boolean;
private var blur:BlurFilter = new BlurFilter();
private var my_rect:Rectangle;
private var offSet:Number;
private var posy_mc_scroll:Number;
//costruttore
public function ScrollY()
{
stage.frameRate=40;
mc_root=this;
mc_scroll=mc_scrolling;
mc_cursore=cursore;
mc_barra=barra;
mc_maschera=maschera;
posy_mc_scroll=mc_barra.y;
btn_scroll_up=btn_up;
btn_scroll_down=btn_down;
tolleranza_y=10;
speed=9;
passo_scroll=15;
attivo_blur=false;
init();
}
//inizializzazione
public function init():void
{
mc_cursore.y=mc_barra.y
mc_cursore.x=mc_barra.x;
mc_cursore.buttonMode=true;
mc_cursore.useHandCursor=true;
mc_cursore.buttonMode=btn_scroll_up.buttonMode=btn_scroll_down.buttonMode=true;
mc_cursore.useHandCursor=btn_scroll_up.useHandCursor=btn_scroll_down.useHandCursor=true;
mc_maschera.y=mc_scroll.y
mc_scroll.mask=mc_maschera;
rettangolo()
initListener()
}
//inizializzazione listener
private function initListener()
{
mc_cursore.addEventListener(MouseEvent.MOUSE_DOWN,start_drag)
btn_scroll_up.addEventListener(MouseEvent.MOUSE_DOWN,scroll_up)
btn_scroll_down.addEventListener(MouseEvent.MOUSE_DOWN,scroll_down)
stage.addEventListener(MouseEvent.MOUSE_UP,stop_drag);
}
//scroll up x btn up
private function scroll_up(e:Event)
{
if(mc_cursore.y>mc_barra.y)
{
if(mc_cursore.y-passo_scroll>mc_barra.y)
{
mc_cursore.y-=passo_scroll
mc_scroll.addEventListener(Event.ENTER_FRAME,scrolla);
}
else
{
mc_cursore.y=mc_barra.y;
}
}
}
//scroll down x btn down
private function scroll_down(e:Event)
{
if(mc_cursore.y<mc_barra.y+mc_barra.height-mc_cursore.height)
{
if(mc_cursore.y+passo_scroll<mc_barra.y+mc_barra.height-mc_cursore.height)
{
mc_cursore.y+=passo_scroll
mc_scroll.addEventListener(Event.ENTER_FRAME,scrolla);
}
else
{
mc_cursore.y=mc_barra.y+mc_barra.height-mc_cursore.height;
}
}
}
//start drag x mouse_down su mc_cursore
private function start_drag(e:Event)
{
mc_cursore.down=true;
mc_cursore.startDrag(true,my_rect)
mc_scroll.addEventListener(Event.ENTER_FRAME,scrolla);
}
//stop drag x mouse_up su mc_cursore
private function stop_drag(e:Event)
{
mc_cursore.down=false;
mc_cursore.stopDrag()
}
//scrolla mc_scroll
private function scrolla(e:Event)
{
var perc_cursore:Number=( (mc_cursore.y-posy_mc_scroll) *100)/ (mc_barra.height-mc_cursore.height);
var pf:Number=mc_maschera.y+ ((perc_cursore* (-mc_scroll.height+ mc_maschera.height-tolleranza_y) ) /100)
pf=Math.floor(pf)
mc_scroll.y+=(pf-mc_scroll.y)/speed
if(Math.abs(pf-mc_scroll.y)<0.8 && mc_cursore.down==false)
{
mc_scroll.removeEventListener(Event.ENTER_FRAME,scrolla);
}
if(attivo_blur==true)
{
var delta_blur:int=Math.floor(Math.abs (pf-mc_scroll.y));
blur_scroll(delta_blur);
}
}
//blur mc scroll su scrolla
private function blur_scroll(delta_blurx:int)
{
var blur_val:int;
if(delta_blurx<2 ){blur_val=0}
if(delta_blurx>2 && delta_blurx<35){blur_val=2}
if(delta_blurx>35 && delta_blurx<60){blur_val=4}
if(delta_blurx>60){blur_val=8}
blur.blurY = blur_val;
blur.blurX = blur_val;
blur.quality = BitmapFilterQuality.MEDIUM;
mc_scroll.filters = [blur];
}
//creazione rettangolo x drag
private function rettangolo()
{
offSet=mc_barra.height-mc_cursore.height;
my_rect=new Rectangle(mc_barra.x+1,mc_barra.y,0,offSet);
}
}
}