Accueil > > > TWSCROLLBAR, UNE CLASSE DE SCROLLBAR SIMPLE ET PRATIQUE À UTILISER
TWSCROLLBAR, UNE CLASSE DE SCROLLBAR SIMPLE ET PRATIQUE À UTILISER
Information sur la source
Description
Cette classe a été créée dans une optique de simplicité d'utilisation, de practicité. Je l'utilise désormais dans tous mes travaux. Ses avantages : - La TwScrollBar peut s'utiliser trés simplement, avec un minimum de paramètres. En fait, un seul suffit : la cible de la scrollbar. Tous les autres paramètres sont optionnels. - La cible de la TwScrollBar peut être de type DisplayObject, et de tout objet en héritant : Bitmaps, MovieClip, Sprite, TextField, Loader... - Il est possible de passer lors de l'instanciation vos propres MovieClips pour le rail et l'ascenseur de la barre. Vous obtenez alors très facilement une barre de défilement personnalisée. Si vous ne passez rien, une scrollbar par défaut est déssinée par la classe. - La classe génère elle même le masque nécessaire à toutes les scrollbars. Si la barre est personnalisée, le masque prend la taille de la scrollbar. - Le sens peut être vertical ou horizontal, passé en paramètre lors de l'instanciation (default : vertical). - la TwScrollBar se place elle même au bon endroit selon la cible : a droite ou en bas (un offset est réglable). - La classe génère un effet de flou par défaut, qui peut être enlevé ou personnalisé. - Grace à la propriété blurTarget, l'effet de flou peut être dirigé uniquement vers un enfant de la cible. Par exemple, si la cible est un MovieClip avec un fond animé et un texte, il est possible de ne cibler que la texte pour le flou, tout en scrolant l'ensemble. -Une documentation de type ASDoc est fournie, ainsi qu'un exemple dans un fla (code en image 1).
Source
- /**
- *
- * TwScrollBar v1.00
- * 21/01/2010
- *
- * © FREDERIC CHAPLIN | TwFlash
- * http://www.twflash.fr
- *
- * La license de cette classe et de type Creative Commons Attribution 3.0 License:
- * http://creativecommons.org/licenses/by/3.0/
- *
- * You are free to utilise this class in any manner you see fit, but it is
- * provided ‘as is’ without expressed or implied warranty. The author should
- * be acknowledged and credited appropriately wherever this work is used.
- *
- **/
-
-
- package tw.controls
- {
- import flash.display.DisplayObject;
- import flash.display.Sprite;
- import flash.display.MovieClip;
- import flash.display.Shape;
- import flash.events.*;
- import flash.geom.Point;
- import flash.filters.BlurFilter;
- import aze.motion.*;
- import aze.motion.easing.*;
- /**
- * La TwScrollBar a été créée pour disposer d'une barre de défilement pratique et simple à instancier.
- * <p>L'un de ses principaux avantages est de pouvoir affecter aussi bien du texte qu'un MovieClip.
- * Il peut être complètement personnalisé graphiquement, et dispose d'un effet de flou qui peut lui aussi être personnalisé.
- * Cette effet peut n'être porté que sur un enfant du MovieClip ciblé.</p>
- * <p> La TwScrollBar utilise la bibliothèque eaze, créée par Philippe Elsass pour ses effets de tween. (http://code.google.com/p/eaze-tween/)
- * <p>La TwScrollBar prend en compte les actions de la souris en clic, cliqué-glissé sur l'ascenseur, et molette.</p>
- * <p>Voici un exemple d'instanciation de la TwScrollBar, où <code>myTarget</code> est un objet de type DisplayObject ou en héritant</p>
- * <p><code> var sb:TwScrollBar = new TwScrollBar(myTarget,null, null, 0.9, true,250);<br>
- * sb.decal= 5;<br>
- * addChild(sb);<code>
- */
- public class TwScrollBar extends Sprite
- {
- private static const VERTICAL :String = "vertical";
- private static const HORIZONTAL :String = "horizontal";
-
- private var target :DisplayObject;
-
- private var trackHeight :Number;
- private var scrollDirection :String = VERTICAL;
- private var scrollMask :Sprite;
- private var track :MovieClip;
- private var thumb :MovieClip;
-
- /**
- * @private
- */
- private var _scrollSpeed :Number;
- private var _isBlur :Boolean;
- private var _blurTarget :DisplayObject;
- private var _blurFilter :BlurFilter;
- private var _decal :Number = 5;
- private var _wheelStrenght :Number = 3
-
- private var trackShape :Shape;
- private var thumbShape :Shape;
- private var maskShape :Shape;
- private var no_blurFilter :BlurFilter;
- private var filterArray :Array;
- private var wheelDelta :Number;
- private var newPosTarget :Number;
- private var posPercent :Number;
-
- /**
- * @param pTarget Le DisplayObject qui sera lié à la barre de défilement. La barre ira se créer uatomatiquement à coté de cet objet.
- * @param pTrack Il est possible de définir comme rail un MovieClip défini dans la bibliothèque ou dans le code actionscript. Si aucun parametre n'est spécifié, le rail par défaut, généré par la classe, est utilisé.
- * @param pThumb Il est possible de définir comme ascenseur un MovieClip défini dans la bibliothèque ou dans le code actionscript. Si aucun parametre n'est spécifié, l'ascenseur par défaut, généré par la classe, est utilisé.
- * @param pScrollSpeed permet de spécifier la vitesse de défilement de l'objet <code>target</code>
- * @param pisBlur Permet de spécifier si un effet de flou est appliqué à l'objet <code>target</code> pendant son déplacement
- * @param pTrackHeight Permet de spécifier la hauteur du rail et donc la taille de la partie visible de l'objet <code>target</code>. Si un rail a été spécifié par la propriété <code>pTrack</code>, cette propriété prend la valeur de la taille du rail personnalisé.
- * @param pScrollDirection Permet de spécifier le sens du défilement. la valeur <code>"vertical"</code> permet de definir un défilement de haut en bas, avec la barre à droite de l'objet cible. la valeur <code>"horizontal"<code> permet de definir un défilement de gauche à droite, avec la barre sous l'objet cible.
- * */
- public function TwScrollBar(pTarget:DisplayObject,
- pTrack:MovieClip = null,
- pThumb:MovieClip = null,
- pScrollSpeed:Number = 0.6,
- pIsBlur:Boolean = true,
- pTrackHeight:Number = 100,
- pScrollDirection:String = VERTICAL)
- {
- addEventListener(Event.ADDED_TO_STAGE,activate);
- target = pTarget;
- _blurTarget = target;
- track = pTrack;
- thumb = pThumb;
- _scrollSpeed = pScrollSpeed;
- _isBlur = pIsBlur;
- trackHeight = pTrackHeight;
- scrollDirection = pScrollDirection;
- }
-
- private function activate(evt:Event=null):void
- {
- removeEventListener(Event.ADDED_TO_STAGE,activate);
- addEventListener(Event.REMOVED_FROM_STAGE,destruct);
-
- no_blurFilter = new BlurFilter(0,0,1);
- _scrollSpeed = 1-_scrollSpeed;
- target.cacheAsBitmap = true;
-
- if (scrollDirection == VERTICAL)
- {
- this.x = target.x+target.width+_decal;
- this.y = target.y;
- _blurFilter = new BlurFilter(1,7,3);
- }
- else if (scrollDirection == HORIZONTAL)
- {
- this.x = target.x;
- this.y = target.y+target.height+_decal;
- _blurFilter = new BlurFilter(7,1,3);
- }
-
- //if there's no custom track and no custom thumb, let's construct it
- if (track == null)
- {
- track = new MovieClip();
- this.addChild(track);
- trackShape = new Shape();
- trackShape.graphics.beginFill(0x777777);
- trackShape.graphics.lineStyle(1,0x333333);
- if (scrollDirection == VERTICAL)
- {
- trackShape.graphics.drawRect(0,0,10,trackHeight);
- }
- else if (scrollDirection == HORIZONTAL)
- {
- trackShape.graphics.drawRect(0,0,trackHeight,10);
- }
- track.addChild(trackShape);
- }
- else
- {
- this.addChild(track);
- if (scrollDirection == VERTICAL)
- {
- track.x = -track.width*0.5+_decal;
- track.y = 0;
- trackHeight = track.height;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- track.x = 0;
- track.y = -track.width*0.5+_decal;
- trackHeight = track.height;
- track.rotation = 270;
- }
- }
-
- if (thumb == null)
- {
- thumb = new MovieClip();
- this.addChild(thumb);
- thumbShape = new Shape();
- thumbShape.graphics.beginFill(0x333333);
- if (scrollDirection == VERTICAL)
- {
- thumbShape.graphics.drawRect(0,0,10,20);
- }
- else if (scrollDirection == HORIZONTAL)
- {
- thumbShape.graphics.drawRect(0,0,20,10);
- }
- thumb.addChild(thumbShape);
- }
- else
- {
- this.addChild(thumb);
- if (scrollDirection == VERTICAL)
- {
- thumb.x = -thumb.width*0.5;
- thumb.y =0;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- thumb.x = 0;
- thumb.y = track.y+track.height*0.5;
- thumb.rotation = 270;
- }
- }
-
- var pt:Point = new Point(target.x,target.y);
- var targetpos:Point = globalToLocal(pt);
-
- scrollMask = new Sprite();
- this.addChild(scrollMask);
- maskShape = new Shape();
- maskShape.graphics.beginFill(0x000000);
-
- if (scrollDirection == VERTICAL)
- {
- maskShape.graphics.drawRect(targetpos.x,targetpos.y, target.width, trackHeight);
- }
- else if (scrollDirection == HORIZONTAL)
- {
- maskShape.graphics.drawRect(targetpos.x,targetpos.y, trackHeight, target.height);
- }
-
- scrollMask.addChild(maskShape);
- target.mask = scrollMask;
-
- thumb.addEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
- track.addEventListener(MouseEvent.CLICK, track_clickHandler);
- this.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
- target.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
- }
-
- private function mouseWheelHandler(evt:MouseEvent):void
- {
- var thumbWheelPos:Number;
- if (scrollDirection == VERTICAL)
- {
- thumbWheelPos = thumb.y-evt.delta*_wheelStrenght;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- thumbWheelPos = thumb.x-evt.delta*_wheelStrenght;
- }
- moveThumb(thumbWheelPos);
- }
-
- private function track_clickHandler(evt:MouseEvent):void
- {
- var trackClicPos:Number;
- if (scrollDirection == VERTICAL)
- {
- trackClicPos = evt.stageY-this.y;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- trackClicPos = evt.stageX-this.x;
- }
- moveThumb(trackClicPos);
- }
-
- private function startDragThumb(evt:MouseEvent):void
- {
- thumb.removeEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
- stage.addEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
- stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- }
-
- private function mouseMoveHandler(evt:MouseEvent):void
- {
- var thumbNewPos:Number;
- if (scrollDirection == VERTICAL)
- {
- thumbNewPos = evt.stageY-this.y;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- thumbNewPos = evt.stageX-this.x;
- }
- moveThumb(thumbNewPos);
- }
-
- private function moveThumb(pThumbNewPos:Number):void
- {
- if (scrollDirection == VERTICAL)
- {
-
- if (pThumbNewPos<0)
- {
- thumb.y = 0;
- }
- else if (pThumbNewPos >trackHeight-thumb.height)
- {
- thumb.y = trackHeight-thumb.height;
- }
- else
- {
- thumb.y = pThumbNewPos;
- if (_isBlur == true)
- {
- _blurTarget.filters=[_blurFilter];
- }
- }
- moveTargetVerticaly(thumb.y);
- }
- else if (scrollDirection == HORIZONTAL)
- {
- if (pThumbNewPos<0)
- {
- thumb.x = 0;
- }
- else if (pThumbNewPos >trackHeight-thumb.width)
- {
- thumb.x = trackHeight-thumb.width;
- }
- else
- {
- thumb.x = pThumbNewPos;
- if (_isBlur == true)
- {
- _blurTarget.filters=[_blurFilter];
- }
- }
- moveTargetHorizontaly(thumb.x);
- }
- }
-
- private function moveTargetHorizontaly(thumbX:Number):void
- {
- posPercent = (100*thumbX)/(trackHeight-thumb.width-1);
- newPosTarget = (target.width-trackHeight)*posPercent*0.01;
- eaze(target).to(_scrollSpeed, { x:(this.x-newPosTarget) })
- .onComplete(noBlur);
- }
-
- private function moveTargetVerticaly(thumbY:Number):void
- {
- posPercent = (100*thumbY)/(trackHeight-thumb.height-1);
- newPosTarget = (target.height-trackHeight)*posPercent*0.01;
- eaze(target).to(_scrollSpeed, { y:(this.y-newPosTarget) })
- .onComplete(noBlur);
- }
-
- private function noBlur():void
- {
- if (_isBlur == true)
- {
- _blurTarget.filters=[no_blurFilter];
- }
- }
-
- private function stopDragThumb(evt:MouseEvent):void
- {
- thumb.addEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
- stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- }
- /**
- * Permet de regler ou de récupérer la valeur d'offset sur x ou sur y selon l'orientation de la TwScrollBar.
- *
- * @default 5
- */
- public function get decal():Number
- {
- return _decal;
- }
- /**
- * @private
- */
- public function set decal(val:Number):void
- {
- _decal = val;
- }
-
- /**
- * Cette propriété permet de spécifier quelle est la cible de l'effet de flou de mouvement.
- *
- * <p>Par exemple, si la propriété target de la TwScrollBar est un MovieClip <code>myClip</code> composé d'un texte <code>myText</code> et d'un fond <code>myBg</code>, la valeur <code>blurTarget</code> pointe par défaut sur <code>myClip</code>.
- * Le fond du clip est flouté avec le texte, et cela peut ne pas être le résultat désiré.</p>
- *
- * <p>En passant la valeur <code>myClip.myText</code> à la propriété blurTarget, seul le texte bénéficiera de l'effet. Le fond ne sera pas affecté.</p>
- *
- * @default target
- */
- public function get blurTarget():DisplayObject
- {
- return _blurTarget;
- }
- /**
- * @private
- */
- public function set blurTarget(val:DisplayObject):void
- {
- _blurTarget = val;
- }
-
- /**
- * Cette propriété permet de passer un objet <code>BlurFilter</code> à la scrollBar, qui remplace l'objet <code>BlurFilter</code> intégré.
- */
- public function get blurFilter():BlurFilter
- {
- return _blurFilter;
- }
- /**
- * @private
- */
- public function set blurFilter(val:BlurFilter):void
- {
- _blurFilter = val;
- }
-
- /**
- * Cette propriété permet de definir si l'effet de flou est activé par le mouvement.
- *
- * @default true
- */
- public function get isBlur():Boolean
- {
- return _isBlur;
- }
- /**
- * @private
- */
- public function set isBlur(val:Boolean):void
- {
- _isBlur = val;
- }
-
- /**
- * Cette propriété permet de definir la vitesse de défilement de la cible. La valeur doit être comprise entre 0 et 1.
- * <p>"1" est la valeur qui deplace la cible le plus vite. A cette valeur, le déplacement est instantané.
- * "0" pour un déplacement tres lent.</p>
- *
- * @default 0.3
- */
- public function get scrollSpeed():Number
- {
- return _scrollSpeed;
- }
- /**
- * @private
- */
- public function set scrollSpeed(val:Number):void
- {
- if (val <=1 && val >=0)
- {
- _scrollSpeed = val;
- }
- else
- {
- trace ("ERREUR : la valeur de scrollSpeed doit être comprise entre 0 et 1.");
- }
- }
- /**
- * Cette propriété permet de regler la force de l'effet de la molette de la souris sur le déplacement. La valeur doit être comprise entre 1 et 10.
- * La valeur agit comme un multiplicateur.
- *
- * @default 3
- */
- public function set wheelStrenght(val:uint):void
- {
- if (val<=10)
- {
- _wheelStrenght = val;
- }
- else
- {
- trace ("ERREUR : la valeur de wheelStrenght doit être un entier positif et ne pas dépasser 10");
- }
- }
- /**
- * @private
- */
- public function get wheelStrenght():uint
- {
- return _wheelStrenght;
- }
- /**
- * Cette propriété en lecture seule, renvoie le pourcentage correspondant à la position de l'ascenseur par rapport à la hauteur du rail.
- *
- */
- public function get thumbPercent ():int
- {
- var pt:Point = new Point(thumb.x+thumb.width*0.5, thumb.y+thumb.height*0.5);
- var localPt : Point = globalToLocal(pt);
- var _thumbPercent:int;
- if (scrollDirection == VERTICAL)
- {
- _thumbPercent = localPt.y/(trackHeight-thumb.height)*100;
- }
- else if (scrollDirection == HORIZONTAL)
- {
- _thumbPercent = localPt.x/(trackHeight-thumb.width)*100;
- }
- return _thumbPercent;
- }
-
- private function destruct(evt:Event):void
- {
- thumb.removeEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
- stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- this.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
- target.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
- removeEventListener(Event.ADDED_TO_STAGE,activate);
- removeEventListener(Event.REMOVED_FROM_STAGE,destruct);
- }
- }
- }
/**
*
* TwScrollBar v1.00
* 21/01/2010
*
* © FREDERIC CHAPLIN | TwFlash
* http://www.twflash.fr
*
* La license de cette classe et de type Creative Commons Attribution 3.0 License:
* http://creativecommons.org/licenses/by/3.0/
*
* You are free to utilise this class in any manner you see fit, but it is
* provided ‘as is’ without expressed or implied warranty. The author should
* be acknowledged and credited appropriately wherever this work is used.
*
**/
package tw.controls
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.*;
import flash.geom.Point;
import flash.filters.BlurFilter;
import aze.motion.*;
import aze.motion.easing.*;
/**
* La TwScrollBar a été créée pour disposer d'une barre de défilement pratique et simple à instancier.
* <p>L'un de ses principaux avantages est de pouvoir affecter aussi bien du texte qu'un MovieClip.
* Il peut être complètement personnalisé graphiquement, et dispose d'un effet de flou qui peut lui aussi être personnalisé.
* Cette effet peut n'être porté que sur un enfant du MovieClip ciblé.</p>
* <p> La TwScrollBar utilise la bibliothèque eaze, créée par Philippe Elsass pour ses effets de tween. (http://code.google.com/p/eaze-tween/)
* <p>La TwScrollBar prend en compte les actions de la souris en clic, cliqué-glissé sur l'ascenseur, et molette.</p>
* <p>Voici un exemple d'instanciation de la TwScrollBar, où <code>myTarget</code> est un objet de type DisplayObject ou en héritant</p>
* <p><code> var sb:TwScrollBar = new TwScrollBar(myTarget,null, null, 0.9, true,250);<br>
* sb.decal= 5;<br>
* addChild(sb);<code>
*/
public class TwScrollBar extends Sprite
{
private static const VERTICAL :String = "vertical";
private static const HORIZONTAL :String = "horizontal";
private var target :DisplayObject;
private var trackHeight :Number;
private var scrollDirection :String = VERTICAL;
private var scrollMask :Sprite;
private var track :MovieClip;
private var thumb :MovieClip;
/**
* @private
*/
private var _scrollSpeed :Number;
private var _isBlur :Boolean;
private var _blurTarget :DisplayObject;
private var _blurFilter :BlurFilter;
private var _decal :Number = 5;
private var _wheelStrenght :Number = 3
private var trackShape :Shape;
private var thumbShape :Shape;
private var maskShape :Shape;
private var no_blurFilter :BlurFilter;
private var filterArray :Array;
private var wheelDelta :Number;
private var newPosTarget :Number;
private var posPercent :Number;
/**
* @param pTarget Le DisplayObject qui sera lié à la barre de défilement. La barre ira se créer uatomatiquement à coté de cet objet.
* @param pTrack Il est possible de définir comme rail un MovieClip défini dans la bibliothèque ou dans le code actionscript. Si aucun parametre n'est spécifié, le rail par défaut, généré par la classe, est utilisé.
* @param pThumb Il est possible de définir comme ascenseur un MovieClip défini dans la bibliothèque ou dans le code actionscript. Si aucun parametre n'est spécifié, l'ascenseur par défaut, généré par la classe, est utilisé.
* @param pScrollSpeed permet de spécifier la vitesse de défilement de l'objet <code>target</code>
* @param pisBlur Permet de spécifier si un effet de flou est appliqué à l'objet <code>target</code> pendant son déplacement
* @param pTrackHeight Permet de spécifier la hauteur du rail et donc la taille de la partie visible de l'objet <code>target</code>. Si un rail a été spécifié par la propriété <code>pTrack</code>, cette propriété prend la valeur de la taille du rail personnalisé.
* @param pScrollDirection Permet de spécifier le sens du défilement. la valeur <code>"vertical"</code> permet de definir un défilement de haut en bas, avec la barre à droite de l'objet cible. la valeur <code>"horizontal"<code> permet de definir un défilement de gauche à droite, avec la barre sous l'objet cible.
* */
public function TwScrollBar(pTarget:DisplayObject,
pTrack:MovieClip = null,
pThumb:MovieClip = null,
pScrollSpeed:Number = 0.6,
pIsBlur:Boolean = true,
pTrackHeight:Number = 100,
pScrollDirection:String = VERTICAL)
{
addEventListener(Event.ADDED_TO_STAGE,activate);
target = pTarget;
_blurTarget = target;
track = pTrack;
thumb = pThumb;
_scrollSpeed = pScrollSpeed;
_isBlur = pIsBlur;
trackHeight = pTrackHeight;
scrollDirection = pScrollDirection;
}
private function activate(evt:Event=null):void
{
removeEventListener(Event.ADDED_TO_STAGE,activate);
addEventListener(Event.REMOVED_FROM_STAGE,destruct);
no_blurFilter = new BlurFilter(0,0,1);
_scrollSpeed = 1-_scrollSpeed;
target.cacheAsBitmap = true;
if (scrollDirection == VERTICAL)
{
this.x = target.x+target.width+_decal;
this.y = target.y;
_blurFilter = new BlurFilter(1,7,3);
}
else if (scrollDirection == HORIZONTAL)
{
this.x = target.x;
this.y = target.y+target.height+_decal;
_blurFilter = new BlurFilter(7,1,3);
}
//if there's no custom track and no custom thumb, let's construct it
if (track == null)
{
track = new MovieClip();
this.addChild(track);
trackShape = new Shape();
trackShape.graphics.beginFill(0x777777);
trackShape.graphics.lineStyle(1,0x333333);
if (scrollDirection == VERTICAL)
{
trackShape.graphics.drawRect(0,0,10,trackHeight);
}
else if (scrollDirection == HORIZONTAL)
{
trackShape.graphics.drawRect(0,0,trackHeight,10);
}
track.addChild(trackShape);
}
else
{
this.addChild(track);
if (scrollDirection == VERTICAL)
{
track.x = -track.width*0.5+_decal;
track.y = 0;
trackHeight = track.height;
}
else if (scrollDirection == HORIZONTAL)
{
track.x = 0;
track.y = -track.width*0.5+_decal;
trackHeight = track.height;
track.rotation = 270;
}
}
if (thumb == null)
{
thumb = new MovieClip();
this.addChild(thumb);
thumbShape = new Shape();
thumbShape.graphics.beginFill(0x333333);
if (scrollDirection == VERTICAL)
{
thumbShape.graphics.drawRect(0,0,10,20);
}
else if (scrollDirection == HORIZONTAL)
{
thumbShape.graphics.drawRect(0,0,20,10);
}
thumb.addChild(thumbShape);
}
else
{
this.addChild(thumb);
if (scrollDirection == VERTICAL)
{
thumb.x = -thumb.width*0.5;
thumb.y =0;
}
else if (scrollDirection == HORIZONTAL)
{
thumb.x = 0;
thumb.y = track.y+track.height*0.5;
thumb.rotation = 270;
}
}
var pt:Point = new Point(target.x,target.y);
var targetpos:Point = globalToLocal(pt);
scrollMask = new Sprite();
this.addChild(scrollMask);
maskShape = new Shape();
maskShape.graphics.beginFill(0x000000);
if (scrollDirection == VERTICAL)
{
maskShape.graphics.drawRect(targetpos.x,targetpos.y, target.width, trackHeight);
}
else if (scrollDirection == HORIZONTAL)
{
maskShape.graphics.drawRect(targetpos.x,targetpos.y, trackHeight, target.height);
}
scrollMask.addChild(maskShape);
target.mask = scrollMask;
thumb.addEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
track.addEventListener(MouseEvent.CLICK, track_clickHandler);
this.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
target.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
}
private function mouseWheelHandler(evt:MouseEvent):void
{
var thumbWheelPos:Number;
if (scrollDirection == VERTICAL)
{
thumbWheelPos = thumb.y-evt.delta*_wheelStrenght;
}
else if (scrollDirection == HORIZONTAL)
{
thumbWheelPos = thumb.x-evt.delta*_wheelStrenght;
}
moveThumb(thumbWheelPos);
}
private function track_clickHandler(evt:MouseEvent):void
{
var trackClicPos:Number;
if (scrollDirection == VERTICAL)
{
trackClicPos = evt.stageY-this.y;
}
else if (scrollDirection == HORIZONTAL)
{
trackClicPos = evt.stageX-this.x;
}
moveThumb(trackClicPos);
}
private function startDragThumb(evt:MouseEvent):void
{
thumb.removeEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
private function mouseMoveHandler(evt:MouseEvent):void
{
var thumbNewPos:Number;
if (scrollDirection == VERTICAL)
{
thumbNewPos = evt.stageY-this.y;
}
else if (scrollDirection == HORIZONTAL)
{
thumbNewPos = evt.stageX-this.x;
}
moveThumb(thumbNewPos);
}
private function moveThumb(pThumbNewPos:Number):void
{
if (scrollDirection == VERTICAL)
{
if (pThumbNewPos<0)
{
thumb.y = 0;
}
else if (pThumbNewPos >trackHeight-thumb.height)
{
thumb.y = trackHeight-thumb.height;
}
else
{
thumb.y = pThumbNewPos;
if (_isBlur == true)
{
_blurTarget.filters=[_blurFilter];
}
}
moveTargetVerticaly(thumb.y);
}
else if (scrollDirection == HORIZONTAL)
{
if (pThumbNewPos<0)
{
thumb.x = 0;
}
else if (pThumbNewPos >trackHeight-thumb.width)
{
thumb.x = trackHeight-thumb.width;
}
else
{
thumb.x = pThumbNewPos;
if (_isBlur == true)
{
_blurTarget.filters=[_blurFilter];
}
}
moveTargetHorizontaly(thumb.x);
}
}
private function moveTargetHorizontaly(thumbX:Number):void
{
posPercent = (100*thumbX)/(trackHeight-thumb.width-1);
newPosTarget = (target.width-trackHeight)*posPercent*0.01;
eaze(target).to(_scrollSpeed, { x:(this.x-newPosTarget) })
.onComplete(noBlur);
}
private function moveTargetVerticaly(thumbY:Number):void
{
posPercent = (100*thumbY)/(trackHeight-thumb.height-1);
newPosTarget = (target.height-trackHeight)*posPercent*0.01;
eaze(target).to(_scrollSpeed, { y:(this.y-newPosTarget) })
.onComplete(noBlur);
}
private function noBlur():void
{
if (_isBlur == true)
{
_blurTarget.filters=[no_blurFilter];
}
}
private function stopDragThumb(evt:MouseEvent):void
{
thumb.addEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
/**
* Permet de regler ou de récupérer la valeur d'offset sur x ou sur y selon l'orientation de la TwScrollBar.
*
* @default 5
*/
public function get decal():Number
{
return _decal;
}
/**
* @private
*/
public function set decal(val:Number):void
{
_decal = val;
}
/**
* Cette propriété permet de spécifier quelle est la cible de l'effet de flou de mouvement.
*
* <p>Par exemple, si la propriété target de la TwScrollBar est un MovieClip <code>myClip</code> composé d'un texte <code>myText</code> et d'un fond <code>myBg</code>, la valeur <code>blurTarget</code> pointe par défaut sur <code>myClip</code>.
* Le fond du clip est flouté avec le texte, et cela peut ne pas être le résultat désiré.</p>
*
* <p>En passant la valeur <code>myClip.myText</code> à la propriété blurTarget, seul le texte bénéficiera de l'effet. Le fond ne sera pas affecté.</p>
*
* @default target
*/
public function get blurTarget():DisplayObject
{
return _blurTarget;
}
/**
* @private
*/
public function set blurTarget(val:DisplayObject):void
{
_blurTarget = val;
}
/**
* Cette propriété permet de passer un objet <code>BlurFilter</code> à la scrollBar, qui remplace l'objet <code>BlurFilter</code> intégré.
*/
public function get blurFilter():BlurFilter
{
return _blurFilter;
}
/**
* @private
*/
public function set blurFilter(val:BlurFilter):void
{
_blurFilter = val;
}
/**
* Cette propriété permet de definir si l'effet de flou est activé par le mouvement.
*
* @default true
*/
public function get isBlur():Boolean
{
return _isBlur;
}
/**
* @private
*/
public function set isBlur(val:Boolean):void
{
_isBlur = val;
}
/**
* Cette propriété permet de definir la vitesse de défilement de la cible. La valeur doit être comprise entre 0 et 1.
* <p>"1" est la valeur qui deplace la cible le plus vite. A cette valeur, le déplacement est instantané.
* "0" pour un déplacement tres lent.</p>
*
* @default 0.3
*/
public function get scrollSpeed():Number
{
return _scrollSpeed;
}
/**
* @private
*/
public function set scrollSpeed(val:Number):void
{
if (val <=1 && val >=0)
{
_scrollSpeed = val;
}
else
{
trace ("ERREUR : la valeur de scrollSpeed doit être comprise entre 0 et 1.");
}
}
/**
* Cette propriété permet de regler la force de l'effet de la molette de la souris sur le déplacement. La valeur doit être comprise entre 1 et 10.
* La valeur agit comme un multiplicateur.
*
* @default 3
*/
public function set wheelStrenght(val:uint):void
{
if (val<=10)
{
_wheelStrenght = val;
}
else
{
trace ("ERREUR : la valeur de wheelStrenght doit être un entier positif et ne pas dépasser 10");
}
}
/**
* @private
*/
public function get wheelStrenght():uint
{
return _wheelStrenght;
}
/**
* Cette propriété en lecture seule, renvoie le pourcentage correspondant à la position de l'ascenseur par rapport à la hauteur du rail.
*
*/
public function get thumbPercent ():int
{
var pt:Point = new Point(thumb.x+thumb.width*0.5, thumb.y+thumb.height*0.5);
var localPt : Point = globalToLocal(pt);
var _thumbPercent:int;
if (scrollDirection == VERTICAL)
{
_thumbPercent = localPt.y/(trackHeight-thumb.height)*100;
}
else if (scrollDirection == HORIZONTAL)
{
_thumbPercent = localPt.x/(trackHeight-thumb.width)*100;
}
return _thumbPercent;
}
private function destruct(evt:Event):void
{
thumb.removeEventListener(MouseEvent.MOUSE_DOWN, startDragThumb);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopDragThumb);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
this.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
target.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
removeEventListener(Event.ADDED_TO_STAGE,activate);
removeEventListener(Event.REMOVED_FROM_STAGE,destruct);
}
}
}
Conclusion
Tout le reste est dans le zip.
La TwScrollBar utilise la bibliothèque eaze, créée par Philippe Elsass pour ses effets de tween. (http://code.google.com/p/eaze-tween/)
J'espère que cette classe vous sera autant utile qu'à moi. Elle est sous licence Creative Commons, vous pouvez donc l'utiliser sans limitation (bon la revendez pas, hein ?), juste en me citant moi ou mon site www.twflash.fr, ou vous voulez.
Historique
- 23 janvier 2010 06:10:03 :
- Créditation de Philippe Elsass pour l'utilisation de EAZE.
- 23 janvier 2010 06:18:16 :
- Changement de catégorie
- 25 janvier 2010 16:55:43 :
- Correction de la méthode destruct.
Merki Orange !
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
ScrollBar plus que facile mais belle. [ par tattoo11 ]
Merci de bien vouloir me sauver la vie. J'aimerais que quelqu'un m'explique comment faire un scrollbar avec SwishMax.Je ne comprend pas trop les
Defilement / Scrollbar [ par angelablueheart ]
Bonjour, Je dois développer un site internet adaptable pour HTC hero. Je voudrais pouvoir realiser une scrollbar invisible. C'est à dire je voudrai qu
barre de defilement [ par emi152 ]
bonjour a tous je souhaite faire une barre de défilement personnalisée qui me permet de faire défiler un fichier composé de plusieurs images. La barre
Problème ScrollBar AS3 [ par chickentib ]
Bonjour à tous, J'ai un problème dans mon animation Flash. j'ai créer une séquence intro qui déroule une animation d'introduction. A la fin, je redir
[AS3] Les scrollbar... c'est si difficile ? [ par vedelvetsyn ]
B'soir, Je suis en train de plancher pour faire une scrollbar. J'apprends auprès de tuto, mais ceux que j'ai trouvé me paraissent assez complexe. Es
Flash defilement [ par jdelaras ]
Bonjour à tous, J'ai apliqué le tut du site : http://www.trucsweb.com/flash/trucs.asp?no=365&type=20 et tous fonctions bien. Mais j'aurai voulu créer
Zone de texte avec scrollbar qui change selon bouton [ par solspire ]
Bonjour à tous, J'ai Flash CS3, mon doc est en AS3 et je suis débutant alors restez cool avec les codes. Voila, j'ai 4 bouton sur mon flash (chacun
redimensionner scrollbar en fonction de la resolution de l'ecran [ par jobe06 ]
Bonjour à tous. Voilà j'ai fait un diaporama d'image gerer avec un scrollbar horizotale, mais j'aimerai que le scrollbar s'adapte a la taille de ma f
scrollbar [ par ehp ]
Bonsoir, J'ai un petit soucis avec ma barre de défilement, le mc_barre monte trop haut et ne descend pas assez bas pour pouvoir lire le reste du texte
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|