IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Déplacement d'une zone scrollable par drag&drop


Sujet :

Flex

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut Déplacement d'une zone scrollable par drag&drop
    Bonjour, je crée un éditeur de plan d'architecte. Il faudrait que je puisse naviguer dans mon plan comme dans GMaps. Drag and drop pour attraper la carte et la déplacer (avec du easing ce serait le top) + zoom et dezoom avec la roulette.
    Pour le zoom, ca devrait aller, je devrais trouver facilement (si vous avez des bon lien, je refuse pas non plus). Mais c'est pour le déplacement que je lutte un peu à trouver.
    Could you help me pleaaaaase ?

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Bonjour,

    3 thread plus bas tu as un exemple détaillé de la gestion du drag & drop en Flex ...

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    oui, je sais, mais pour ce cas particulier, j'ai du mal.
    Le drag&drop classique ne déplace pas l'objet en temps réel mais au moment du drop en affichant ce carré qui représente l'objet. Moi je voudrais tenir la map et la faire bouger comme je veux et que quand je la relâche elle continue un peu avec de l'inertie (et que je puisse la rattraper derrière sans être obligé d'attendre la fin du mouvement).

    C'est quand même bien particulier et je pense que ça peut être utile pour pas mal d'appli, donc je me suis permis de créer un thread dédié. (oui oui j'ai cherché avant)

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Si le drag&drop ne te convient pas tu peux toujours faire "à la main" c'est assez simple ...

    1 - au MouseDown = tu écoute l'event mouseMove
    2 - au MouseMove = tu suis la souris avec ton image (image.x = mouseX ,...)
    3 - au MouseUp = tu supprimer l'écouteur sur le mouseMove

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Bon, je met pas résolu, je vais voir ce que j'arrive à faire en manuel. J’essaierais de le poster si j'y arrive et si c'est propre

    merci

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Je galère, le controle des scrollposition par mouseMove est sacadé, comme si les scroll revenait à 0 entre chaque déplacements

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Voilà le code :

    Tool_plan.as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    package gardeneditor.toolbar
    {
    	import assets.Resources;
     
    	import flash.events.MouseEvent;
    	import flash.geom.Point;
    	import flash.utils.Timer;
     
    	import gardeneditor.GardenEditor;
    	import gardeneditor.gardenplan.Item;
     
    	public class Tool_plan extends Tool
    	{
    		protected var _dragDownPt:Point;
    		protected var _prevPt:Point;
     
    		public function Tool_plan(gardenEditor:GardenEditor)
    		{
    			super(gardenEditor,"action",GardenEditor.MODE_PLAN,Tool.MODE_EDITION);
    			setStyle("icon",Resources.ICON_ARROW);
    		}
     
    		override public function startAction():void{
    			super.startAction();
    			gardenEditor.plan.addEventListener(MouseEvent.CLICK,select);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
    		}
     
    		override public function endAction(keepCurrent:Boolean = false):void{
    			gardenEditor.plan.removeEventListener(MouseEvent.CLICK,select);
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
    			super.endAction(keepCurrent);
    		}
     
    		protected function select(event:MouseEvent):void{
    			if(event.target is Item){
    				var item:Item = event.target as Item;
    				gardenEditor.loadSpecialEditionMode(item.type);
    				gardenEditor.plan.focusedItem = item;
    			}
    			else
    				trace("click");
    		}
     
    		protected function mouseDownHandler(event:MouseEvent):void{
    			_dragDownPt = new Point(gardenEditor.plan.mouseX,gardenEditor.gardenNav.scroller.mouseY);
    			_prevPt = new Point(_dragDownPt.x,_dragDownPt.y);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_MOVE,movePlan);
    		}
    		protected function mouseUpHandler(event:MouseEvent):void{
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_MOVE,movePlan);			
    		}
    		protected function movePlan(event:MouseEvent):void{
    			if(Math.abs(_dragDownPt.x - gardenEditor.gardenNav.scroller.mouseX) <= 2 && Math.abs(_dragDownPt.y - gardenEditor.gardenNav.scroller.mouseY) <= 2 
    				|| Math.abs(_prevPt.x - gardenEditor.gardenNav.scroller.mouseX) > 100 
    				|| Math.abs(_prevPt.y - gardenEditor.gardenNav.scroller.mouseY) > 100)
    				return; 
    			trace((_prevPt.x - gardenEditor.gardenNav.scroller.mouseX)+" , "+(_prevPt.y - gardenEditor.gardenNav.scroller.mouseY));
    			gardenEditor.gardenNav.scroller.horizontalScrollPosition += _prevPt.x - gardenEditor.gardenNav.scroller.mouseX;
    			gardenEditor.gardenNav.scroller.verticalScrollPosition += _prevPt.y - gardenEditor.gardenNav.scroller.mouseY;
     
    			_prevPt.x = gardenEditor.gardenNav.scroller.mouseX;
    			_prevPt.y = gardenEditor.gardenNav.scroller.mouseY;
     
    		}
    	}
    }
    GardenNavigator.mxml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?xml version="1.0" encoding="utf-8"?>
    <s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009"
    		  xmlns:s="library://ns.adobe.com/flex/spark"
    		  xmlns:mx="library://ns.adobe.com/flex/mx"
    		  xmlns:itemspicker="gardeneditor.itemspicker.*"
    		  xmlns:gardenplan="gardeneditor.gardenplan.*">
    	<fx:Script>
    			....
    	</fx:Script>
    	<s:Group width="100%">
    		<s:layout>
    			<s:VerticalLayout horizontalAlign="right"/>
    		</s:layout>
    		<s:HSlider id="zoomSlider" minimum=".44" maximum="1" value="{zoom}" stepSize=".05" width="180" height="10"
    				   focusEnabled="false" 
    				   change="zoomSlider_changeHandler(event)"/>		
    	</s:Group>
    	<s:Scroller width="100%" height="100%" styleName="gardenNavScroller">
    		<s:Group id="scroller"
    				 rollOver="setListenners()" 
    				 rollOut="removeListenners()"
    				 mouseWheel="scroller_mouseWheelHandler(event)">
    			<gardenplan:GardenPlan id="plan" creationComplete="plan_creationCompleteHandler(event)" width="2000" height="1510"/>
    		</s:Group>
    	</s:Scroller>
    </s:VGroup>

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 56
    Points : 41
    Points
    41
    Par défaut
    Bon, j'ai trouvé. Je prenais relevais la position de la souris par rapport à mon objet mobile, il fallait mesurer par rapport au parent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    package gardeneditor.toolbar
    {
    	import assets.Resources;
     
    	import flash.events.MouseEvent;
    	import flash.geom.Point;
    	import flash.utils.Timer;
     
    	import gardeneditor.GardenEditor;
    	import gardeneditor.gardenplan.Item;
     
    	public class Tool_plan extends Tool
    	{
    		protected var _dragDownPt:Point;
    		protected var _prevPt:Point;
     
    		public function Tool_plan(gardenEditor:GardenEditor)
    		{
    			super(gardenEditor,"action",GardenEditor.MODE_PLAN,Tool.MODE_EDITION);
    			setStyle("icon",Resources.ICON_ARROW);
    		}
     
    		override public function startAction():void{
    			super.startAction();
    			gardenEditor.plan.addEventListener(MouseEvent.CLICK,select);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
    		}
     
    		override public function endAction(keepCurrent:Boolean = false):void{
    			gardenEditor.plan.removeEventListener(MouseEvent.CLICK,select);
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
    			super.endAction(keepCurrent);
    		}
     
    		protected function select(event:MouseEvent):void{
    			if(event.target is Item){
    				var item:Item = event.target as Item;
    				gardenEditor.loadSpecialEditionMode(item.type);
    				gardenEditor.plan.focusedItem = item;
    			}
    			else
    				trace("click");
    		}
     
    		protected function mouseDownHandler(event:MouseEvent):void{
    			_dragDownPt = new Point(gardenEditor.gardenNav.mouseX,gardenEditor.gardenNav.mouseY);
    			_prevPt = new Point(_dragDownPt.x,_dragDownPt.y);
    			gardenEditor.plan.addEventListener(MouseEvent.MOUSE_MOVE,movePlan);
    		}
    		protected function mouseUpHandler(event:MouseEvent):void{
    			gardenEditor.plan.removeEventListener(MouseEvent.MOUSE_MOVE,movePlan);			
    		}
    		protected function movePlan(event:MouseEvent):void{
    			if(Math.abs(_dragDownPt.x - gardenEditor.gardenNav.mouseX) <= 2 && Math.abs(_dragDownPt.y - gardenEditor.gardenNav.mouseY) <= 2 
    				|| Math.abs(_prevPt.x - gardenEditor.gardenNav.mouseX) > 100 
    				|| Math.abs(_prevPt.y - gardenEditor.gardenNav.mouseY) > 100)
    				return; 
    			trace((_prevPt.x - gardenEditor.gardenNav.mouseX)+" , "+(_prevPt.y - gardenEditor.gardenNav.mouseY));
    			gardenEditor.gardenNav.scroller.horizontalScrollPosition += _prevPt.x - gardenEditor.gardenNav.mouseX;
    			gardenEditor.gardenNav.scroller.verticalScrollPosition += _prevPt.y - gardenEditor.gardenNav.mouseY;
     
    			_prevPt.x = gardenEditor.gardenNav.mouseX;
    			_prevPt.y = gardenEditor.gardenNav.mouseY;
     
    		}
    	}
    }

Discussions similaires

  1. appeler une zone texte par une variable
    Par b.billet85 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/07/2008, 13h46
  2. Déplacement dans une zone de liste
    Par amarchal dans le forum IHM
    Réponses: 2
    Dernier message: 18/02/2007, 17h51
  3. Déplacement dans une div scrollable
    Par kankrelune dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 30/05/2006, 21h52
  4. onchange d'une zone remplie par programmation
    Par japz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 13h58
  5. [MySQL] Envoi identifiant d'une zone membre par mail
    Par vinche999 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/01/2006, 23h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo