Esta clase de componentes con efecto de suavizado son de las mas buscadas, aquí en cristalab tenemos varios ejemplos de ello, sin embargo ya era hora de uno hecho para actionscript 3.
Código :
package ph.graphic{
//
import flash.display.Sprite;
import flash.display.Graphics;
//
public class RectScuare extends Sprite {
//
private var clip :Sprite;
private var wd :uint;
private var hg :uint;
private var bgColor :uint;
//
public function RectScuare(_wd:uint, _hg:uint, _bgColor:uint):void {
//
wd = _wd;
hg = _hg;
bgColor = _bgColor;
//
drawRectScuare();
}
//
private function drawRectScuare():void {
//
clip = new Sprite();
clip.graphics.beginFill(bgColor);
clip.graphics.drawRect(0, 0, wd, hg);
addChild(clip);
}
}// class
}// packageCódigo :
private var holder :MovieClip; // clip contenedor private var clip :MovieClip; // contenido private var clipMask :RectScuare; // máscara private var dragger :RectScuare; // barra del scroll private var slider :RectScuare; // guía del scroll private var hg :uint; // alto total del componente private var scrolled :uint; // distancia desplazada private var friction :uint; // aceleracion private var currentY :int; // la posicion inmediata del contenido private var fade :Tween; // alpha de la barra del scroll private var fadeAmount :Number; // valor de alpha private var wheel :Boolean; // hace falta aclaracion?
Código :
Zscrollez (_clip:MovieClip, _hg:uint, _friction:uint = 5, _wheel:Boolean = false)
Código :
public function Zscrollez(_clip:MovieClip, _hg:uint, _friction:uint = 5, _wheel:Boolean = false):void {
//
clip = _clip;
hg = _hg;
friction = _friction;
wheel = _wheel;
//
if (clip.height > hg) {
//
createHolder();
createMask();
createSrollBar();
addListeners();
}
}
Código :
private function createHolder():void {
//
holder = new MovieClip();
holder.x = clip.x;
holder.y = clip.y;
clip.x = clip.y = 0;
holder.addChild(clip);
addChild(holder);
}Código :
private function createMask():void {
//
clipMask = new RectScuare(clip.width, hg, 0x000000);
clip.mask = clipMask;
holder.addChild(clipMask);
}
Código :
private function createSrollBar(dH:uint = 30, dC:uint = 0x000000, sC:uint = 0xCCCCCC):void {
//
draggerHg = dH;
draggerColor = dC;
sliderColor = sC;
//
slider = new RectScuare(10, hg, sliderColor);
dragger = new RectScuare(10, dH, draggerColor);
slider.x = dragger.x = clip.width + 5;
holder.addChild(slider);
holder.addChild(dragger);
}
Código :
private function dragOn(e:Event):void {
//
dragger.startDrag(false, new Rectangle(dragger.x, 0, 0, slider.height - dragger.height));
dragOnOutSide();
}
private function dragOff(e:Event):void {
//
dragger.stage.removeEventListener(MouseEvent.MOUSE_UP, dragOff);
dragger.stopDrag();
}
private function dragOnOutSide():void {
//
dragger.stage.addEventListener(MouseEvent.MOUSE_UP, dragOff);
}
Código :
private function fadeIn(e:Event):void {
//
e.type == "rollOver" ? fadeAmount = 0.5 : fadeAmount = 1;
fade = new Tween(e.target, "alpha", Strong.easeOut, e.target.alpha, fadeAmount, 0.5, true);
}
Código :
private function easeIn(e:Event):void
//
{if (friction >= 5) friction = 5;
/*
cuidamos que no se pase de 5 ya de lo contrario
el calculo dispara el contenido realmente al carajo
*/
// calculamos el porcentaje del dragger que se ha movido
scrolled = dragger.y / (hg - dragger.height) * 100;
// ahora hacemos lo mismo con respecto al contenido
currentY = -(clip.height - hg) * scrolled / 100;
// y asignamos la posición con respecto al valor de fricción
clip.y += (currentY - clip.y) / friction;
}
Código :
private function aplyScrollWheel(e:MouseEvent):void {
//
dragger.y += e.delta * -4;
//
if (dragger.y < 0) {
//
dragger.y = 0;
} else if (dragger.y > (slider.height - dragger.height)) {
//
dragger.y = slider.height - dragger.height;
}
}
Código :
private function addListeners():void {
//
dragger.addEventListener(MouseEvent.ROLL_OVER, fadeIn);
dragger.addEventListener(MouseEvent.ROLL_OUT, fadeIn);
dragger.addEventListener(MouseEvent.MOUSE_DOWN, dragOn);
dragger.addEventListener(MouseEvent.MOUSE_UP, dragOff);
dragger.addEventListener(Event.ENTER_FRAME, easeIn);
//
if (wheel == true) {
clip.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
}
}
Código :
public function set scrollWheel(b:Boolean):void {
//
wheel = b;
addListeners();
}
//
public function set handCursor(h:Boolean):void {
//
dragger.buttonMode = h;
}
Código :
public function scrollBarProperties(_draggerHg:uint, _draggerC:uint, _sliderC:uint):void {
//
draggerHg = _draggerHg;
draggerColor = _draggerC;
sliderColor = _sliderC;
//
createSrollBar(draggerHg, draggerColor, sliderColor);
addListeners();
}
Código :
public function backGround(_bgColor:uint = 0xFFFFFF, _bgAlpha:Number = 1):void {
//
bgColor = _bgColor;
bgAlpha = _bgAlpha;
//
bGround = new RectScuare(clip.width, hg, bgColor);
bGround.x = bGround.y = 0;
bGround.alpha = bgAlpha;
holder.addChild(bGround);
holder.swapChildren(bGround, clip);
}
Código :
package ph.component{
//
import flash.display.*;
import flash.events.*;
import flash.geom.Rectangle;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import ph.graphic.RectScuare;
//-----------------------------------------------
public class Zscrollez extends Sprite {
//
private var holder :MovieClip;
private var clip :MovieClip;
private var clipMask :RectScuare;
private var dragger :RectScuare;
private var slider :RectScuare;
private var bGround :RectScuare;
private var bgAlpha :Number;
private var bgColor :uint;
private var hg :uint;
private var scrolled :uint;
private var friction :uint;
private var currentY :int;
private var draggerHg :uint;
private var draggerColor :uint;
private var sliderColor :uint;
private var fade :Tween;
private var fadeAmount :Number;
private var wheel :Boolean;
//------------------------------------------------------------------------
public function Zscrollez(_clip:MovieClip, _hg:uint, _friction:uint = 5, _wheel:Boolean = false):void {
//
clip = _clip;
hg = _hg;
friction = _friction;
wheel = _wheel;
//
if (clip.height > hg) {
//
createHolder();
createMask();
createSrollBar();
addListeners();
}
}
//---------------------------------------------------------------------------
public function set scrollWheel(b:Boolean):void {
//
wheel = b;
addListeners();
}
//
public function set handCursor(h:Boolean):void {
//
dragger.buttonMode = h;
}
//---------------------------------------------------------------------------
public function scrollBarProperties(_draggerHg:uint, _draggerC:uint, _sliderC:uint):void {
//
draggerHg = _draggerHg;
draggerColor = _draggerC;
sliderColor = _sliderC;
//
createSrollBar(draggerHg, draggerColor, sliderColor);
addListeners();
}
//---------------------------------------------------------------------------
public function backGround(_bgColor:uint = 0xFFFFFF, _bgAlpha:Number = 1):void {
//
bgColor = _bgColor;
bgAlpha = _bgAlpha;
//
bGround = new RectScuare(clip.width, hg, bgColor);
bGround.x = bGround.y = 0;
bGround.alpha = bgAlpha;
holder.addChild(bGround);
holder.swapChildren(bGround, clip);
}
//---------------------------------------------------------------------------
private function createHolder():void {
//
holder = new MovieClip();
holder.x = clip.x;
holder.y = clip.y;
clip.x = clip.y = 0;
holder.addChild(clip);
addChild(holder);
}
//---------------------------------------------------------------------------
private function createMask():void {
//
clipMask = new RectScuare(clip.width, hg, 0x000000);
clip.mask = clipMask;
holder.addChild(clipMask);
}
//---------------------------------------------------------------------------
private function createSrollBar(dH:uint = 30, dC:uint = 0x000000, sC:uint = 0xCCCCCC):void {
//
draggerHg = dH;
draggerColor = dC;
sliderColor = sC;
//
slider = new RectScuare(10, hg, sliderColor);
dragger = new RectScuare(10, dH, draggerColor);
slider.x = dragger.x = clip.width + 5;
holder.addChild(slider);
holder.addChild(dragger);
}
//--------------------------------------------------------------------------
private function dragOn(e:Event):void {
//
dragger.startDrag(false, new Rectangle(dragger.x, 0, 0, slider.height - dragger.height));
dragOnOutSide();
}
private function dragOff(e:Event):void {
//
dragger.stage.removeEventListener(MouseEvent.MOUSE_UP, dragOff);
dragger.stopDrag();
}
private function dragOnOutSide():void {
//
dragger.stage.addEventListener(MouseEvent.MOUSE_UP, dragOff);
}
//---------------------------------------------------------------------------
private function fadeIn(e:Event):void {
//
e.type == "rollOver" ? fadeAmount = 0.5 : fadeAmount = 1;
fade = new Tween(e.target, "alpha", Strong.easeOut, e.target.alpha, fadeAmount, 0.5, true);
}
//---------------------------------------------------------------------------
private function easeIn(e:Event):void {
//
if (friction >= 5) friction = 5;
//
scrolled = dragger.y / (hg - dragger.height) * 100;
currentY = -(clip.height - hg) * scrolled / 100;
clip.y += (currentY - clip.y) / friction;
}
//---------------------------------------------------------------------------
private function aplyScrollWheel(e:MouseEvent):void {
//
dragger.y += e.delta * -4;
//
if (dragger.y < 0) {
//
dragger.y = 0;
} else if (dragger.y > (slider.height - dragger.height)) {
//
dragger.y = slider.height - dragger.height;
}
}
//--------------------------------------------------------------------------
private function addListeners():void {
//
dragger.addEventListener(MouseEvent.ROLL_OVER, fadeIn);
dragger.addEventListener(MouseEvent.ROLL_OUT, fadeIn);
dragger.addEventListener(MouseEvent.MOUSE_DOWN, dragOn);
dragger.addEventListener(MouseEvent.MOUSE_UP, dragOff);
dragger.addEventListener(Event.ENTER_FRAME, easeIn);
//
if (wheel == true) {
clip.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
}
}
//-------------------------------------------------------------------------
}// class
}// package
Código :
import ph.component.Zscrollez; //----------------------------------------------- var textoClip:Clip = new Clip(); var eScroll:Zscrollez = new Zscrollez(textoClip, 300); eScroll.scrollBarProperties(60, 0xFB761E, 0x666666); eScroll.backGround(0xFFFFFF, 0.5); eScroll.scrollWheel = true; eScroll.handCursor = true; eScroll.x = eScroll.y = 15; addChild(eScroll);
Código :
if (wheel == true) {
clip.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
}Código :
stage.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
M@U :
Código :
if (wheel == true) {
clip.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
}Código :
stage.addEventListener(MouseEvent.MOUSE_WHEEL, aplyScrollWheel);
Eliseo-blog :
Código :
private function drawRectScuare():void {
this.graphics.beginFill(bgColor);
this.graphics.drawRect(0, 0, wd, hg);
}AnGeLCoL-blog :