begin process at 2012 02 10 14:50:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > TWSCROLLBAR, UNE CLASSE DE SCROLLBAR SIMPLE ET PRATIQUE À UTILISER

TWSCROLLBAR, UNE CLASSE DE SCROLLBAR SIMPLE ET PRATIQUE À UTILISER


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ActionScripts Classé sous :scrollbar, defilement, twflash, facile, pratique Niveau :Débutant Date de création :23/01/2010 Date de mise à jour :25/01/2010 16:55:33 Vu / téléchargé :5 111 / 708

Auteur : Twinspirit

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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 &#8216;as is&#8217; 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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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 du même auteur

Source avec Zip Source avec une capture MENU ACCORDEON EN AS3 POO AVEC XML

 Sources de la même categorie

Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture PARTICULE SYSTEM par yasdar
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML par yasdar
Source avec Zip Source avec une capture MP3 LAYER NICE &SMALL par yasdar

 Sources en rapport avec celle ci

Source avec Zip CONSTANTE D'OBJET INMODIAFIABLE ET DÉBLOQUABLE par top30
Source avec Zip DISTRIBUTION D'OBJETS par top30
Source avec Zip Source avec une capture TOURNER UN OBJEC VERS LA SOURIS... par top30
Source avec Zip Source avec une capture RENDERDELEGATION: UNE CLASSE SUR L'EVENT.RENDER DU STAGE... par top30
Source avec Zip Source avec une capture CLASS SCROLLBAR COMPLETEMENT PARAMETRABLE par stefbuet

Commentaires et avis

Commentaire de pegase31 le 23/01/2010 12:06:19 administrateur CS

alors pleins de questions en vrac (désolé, j'ai peu de temps) :

Pour la scrollBar en général :
- il n'y a aucune flèche de défilement, ce n'est pas "grave" en soi, mais ça complèterais grandement ton ascenseur
- j'ai essayé d'ajouter une scrollBar Verticale ET horizontale ... et c'est un merdier sans nom.
- il n'y a apparemment pas moyen de naviger "en brut", sans passer via le tween et son décallage qui risque d'en agacer plus d'un
- l'effet de flou est intéressant, mais il est le même qu'on se déplace lentement ou rapidement, c'est dommage.

Pour le Textfield :
Pourquoi ne pas avoir simplement joué sur le principe de scroll d'un textfield multiligne ? C'est tellement plus simple que de masquer un texte de 15 km de long et beaucoup plus rapide en terme de ressource CPU.
Certes, ça aurait obligé à faire une double gestion de scroll, mais c'est tellement plus pratique et dynamique ...

Pour les objets graphiques :
Encore une fois, tu passes par un mask, ce qui est lourd et surtout plus trop adapté sur une émage énorms. Interesse-toi à la propriété ScrollRect du displayObjectContainer. Tu verras que ça te simplifie la vie bien plus que tu ne pourrais l'imaginer.

Conclusion :
Bien, très bien pour une première base. Mais il y a beaucoup de points à revoir, notamment ton principe de masquage qui soit être bien plus dynamique et ne pas dépendre du scrollBar, mais de l'objet auquel il est rattaché.

En as2 existait 2 objets différents : ScrollPane et ScrollBar. L'instanciation du scrollPane avec un target permettait d'appliquer directement les ascenseurs H et V (celon autorisation et paramétrage).
L'intérêt étant de ne pas avoir à se préoccuper de tout les paramétrages "inutiles" et autres détails de distance, taille, etc.
Sans parler du fait de pouvoir, à ce moment là, placer un double ascenseur permettant de scroller librement dans une grande zone.

Peg'

Commentaire de Twinspirit le 23/01/2010 16:57:21

Ca me fait plaisir que ce soit toi qui pose le premier commentaire.
Ca fait pas mal de pistes à explorer. Honnêtement, je ne sais pas si j'aurai le temps de me pencher sur toutes, mais certaines me semblent assez sympa à travailler.
En particulier :
- La possibilité de naviguer sans Tween. C'est possible actuellement en artificiel avec une vitesse réglée à 1. Cela fait un Tween de 0s, mais consommateur de ressources.
- Augmenter l'effet de flou selon la rapidité.
- Utiliser ScrollRect, je vais voir ca de plus prés.

Par contre :
- Le scroll du textfield impose un scroll par lignes de texte, cela ne me plait pas du tout. La fluidité est affreuse.
- Les flèches haut et bas des scrollbars, pour moi, elles sont souvent inutiles. Seulement pour du texte, mais alors, il suffit d'utiliser la scrollbar de flash...
- L'effet scrollpane, avec deux barres, qui pour moi est un composant à part entière, avec son utilisation précise, qui n'est pas celle de la scrollbar. Mais je pourrai essayer de faire fonctionner deux barres en même temps. Histoire de voir si c'est rigolo.
- Et je persiste à penser que c'est la scrollbar qui doit imposer un masque à l'objet scrollé, par sa taille ou par choix de l'utilisateur, même si j'abonde en ton sens sur la consommation de ressources de par les techniques que j'ai utilisé.

Commentaire de Orange73 le 25/01/2010 14:47:32

Hello,

Sympa ta source.

Tu ne te serais pas planté dans ton _destruct ?
"this.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
target.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);"
à remplacer par des removeEventListener.

Sinon, concernant les commentaires :
- Les fleches de défilement : pas obligatoires, mais on devrait pouvoir spécifier des Sprite au cas oú elles sont présentes. (ce que j'ai fait dans ma classe perso)
- Scrollbar H et V : Je suis d'accord avec TwinSpirit. Une Scrollbar n'est pas un scrollpane.
- La possibilité de naviguer sans Tween : Personnellement, mettre la vitesse a 1 suffit, et je trouve que scroller en brut c'est vraiment pas agréable et très difficile de s'y retrouver à chaque sauts.
- L'effet de flou : Je ne le trouve pas du tout classe. J'ai vu des blur effect pour scrollbar 10x mieux.
- ScrollRect : Cool idea pour remplacer le mask :-)

A+

Commentaire de Twinspirit le 25/01/2010 16:52:06

Ouah, c'est clair pour le destruct ! Merci, j'arrange ca de suite.
Apres, pour le blurEffect, ben... Je laisse : tu peux mettre ton propre blur avec la propriété blurFilter de la classe.
Je me suis penché sur scrollRect : ben j'étais passé à côté depuis tout ce temps, et je pense que je ne vais plus m'en passer. Remplacement d'ici une grosse semaine maxi.  

Commentaire de top30 le 25/01/2010 18:12:32 6/10

Salut à tous...

Je n'avais pas prété attention a la propriété "scrollRect" du DisplayObject. Je mis suis donc mis pour voir ce que cela donnait. Oui en fait c'est interessant, car par exemple au contraire de la propriété "mask", une fois un rectangle appliqué, la taille de l'objet DEVIENT celle du rectangle. Pratique pour l'alignement par exemple.

Par contre, pour scroller c'est ausi simple. Tout se passe sur le rectangle et non sur la cible. Pour scroller il suffit de déplacer les axes du rectangle (x ou y), par contre, il faudra redefinir le rectangle si le contenu de la cible change.

NON LES SCROLLBAR NE DOIVENT RIEN SAVOIR DE L'OBJET QU'ELLES SCROLL !!!

Elles émettent un event "change" si elle bouge, avec en proriété de l'event une valeur "scrollPosition" étant un point dont le "x" et le "y" étant définit de 0 à 1.
0 étant la scrollbar à son point départ et 1 à point son arrivée.

Pour les plus pointilleux, le scrollbar peux avoir une fonction "resize(scale)". Ou scale est une valeur entre 0 et 1.
0 redefinisant la taille du "track" à 0 (mais c'est théorique, un minimun non null étant conseillé) et 1 étant la scrollbar remplissant tout le "rail" et donc inutile (se masque seule).

Ainsi votre scrollbar pourra scroller "X" objet.

var rect :Rectangle= new Rectangle(0,0,200,100) ;
var objectHeight :Number= monObject.height ;
monObject.scrollRect= rect );
trace( monObject.height ) ;// 200 ;

function onChange ( $e:ScrollEvent ):void{
   rect= monObject.scrollRect ;
   rect.y= $e.scrollPosition.y*objectHeight
   monObject.scrollRect= rect ,
}
myScrollbar.addEventListener("change",onChange );

C'est pas du code fonctionel, c'est écrit comme ca pour vous indiquer le chemin à suivre. Si ca vous chante bien sur... Mais faites-moi confiance, c/est comme ca. Car avec ce que je vous ai décrit même si plusieurs object écoute la même scrollbar et que un suel en définit la taille du "track" réllement proportionnel, les autres object continues de scroller normalement.

Si j'ai le temps un jour je vous ferais une démo...

Commentaire de top30 le 25/01/2010 18:16:17

avec toutes mes excuses.
L'exemple plus ou moins correcte est le suivant:



var rect :Rectangle= new Rectangle(0,0,200,100) ;
var offset :Number= rect.height-monObject.height ;
monObject.scrollRect= rect ;
trace( monObject.height ) ;// 200 ;

function onChange ( $e:ScrollEvent ):void{
   rect= monObject.scrollRect ;
   rect.y= $e.scrollPosition.y*offset ;
   monObject.scrollRect= rect :
}
myScrollbar.addEventListener("change",onChange );

Commentaire de Twinspirit le 25/01/2010 19:02:49

Certes, il parait plus logique d'utiliser le système évènementiel.

Mais je pense qu'en gérant le déplacement de l'objet à l'extérieur de la classe, on complique le code pour pas grand chose. Il est extrêmement rare qu'une scrollbar gère plusieurs objets en même temps. Ainsi on obligerait les gens à compliquer la mise en place de la scrollbar pour rien dans la plupart des cas.

De plus, avec scrollRect, on ne touchera plus à l'objet lui même, mais à ce fameux rectangle. Donc, on restera conforme.

Le but de cette classe, c'est une instanciation en deux lignes dans le code principal et basta, on ne s'en occupe plus, c'est fait, et ca se gère tout seul. Gagner du temps et de la clarté !

Par contre, rajouter un évènement onChange est possible facilement (il y a déjà la propriété thumbPercent ici). Ainsi, si le cas se présente, on pourra gérer plusieurs objets dans le code de la classe conteneur.
Je le note dans la TODO list !
    

Commentaire de top30 le 27/01/2010 01:59:33

Bon ben comme j ai pas envie de partir dans de long discours qui apparement ne te feront pas changer d avis. Je t ai fait un "cadeau" dans la source suivante je t ai creer un objet "ProxyHV" et une demo...

Bref il est tard je suis fatigue, profite et a plus...



Desole pour les fautes, mais y a mon "clavier" qui a encore saute et me re fait n importe quoi....

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

ScrollBar plus que facile mais belle. [ par tattoo11 ] &nbsp;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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales