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

JavaScript Discussion :

Drag and drop


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2012
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 83
    Par d�faut Drag and drop
    Bonsoir � tous ,

    Je rencontre quelques probl�mes � la r�alisation d'un drag and drop sur une div sp�cifique.
    Voici mon code js:
    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
    (function dragDrop() {
    	var element = document.querySelector('.draggableBox');
    	var inTheBox;
     
    	element.addEventListener('mousedown', function() {
    		inTheBox = true;
    	}, false)
     
    	element.addEventListener('mouseup', function() {
    		inTheBox = false;
    	}, false)
     
    	document.onmousemove = function(e) {	
    		if(inTheBox) {
    			element.style.left = e.clientX - (e.clientX - element.offsetLeft) +"px";
    			element.style.top = e.clientY - (e.clientY - element.offsetTop) +"px";
    		}
    	}
    })();
    Voil� la page pour visualiser ce qu'il se passe: http://jsfiddle.net/rJe3n/

    H�las je ne parviens pas � comprendre pourquoi �a ne fonctionne pas.
    Si quelqu'un pouvait m'aider � comprendre ce qui cloche je lui en serait tr�s reconnaissant !
    Merci de votre aide.

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Par d�faut
    Bonjour,

    Plusieurs petites choses ne vont pas dans votre code.

    1.La m�thode querySelector() vous retourne le premier noeud du DOM dont la class est draggableBox. Cependant celui-ci est recouvert pas le div 2 qui lui m�me est recouvert par le div 3 ce qui vous emp�che de vraiment tester ce qui ne vas pas dans votre code. Afin de faciliter la compr�hension nous allons proc�d� avec un unique draggableBox.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <div class="draggableBox">1</div>
    2.L��v�nement mousedown ne fait qu'en partie ce que vous attendez de lui, il vous faut r�cup�rer les coordonn�es de la souris sur l'�l�ment que vous d�placez et faire la diff�rence avec les coordonn�es de l��l�ment qu'on s'appr�te � d�placer.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    element.addEventListener('mousedown', function(e) {
    element.x = e.clientX - element.offsetLeft;
    element.y = e.clientY - element.offsetTop;
    inTheBox = true;
    }, false)
    L'�v�nement mousemove ce sert d'un coordonn�e pr�alablement calcul� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    document.onmousemove = function(e) {
                if(inTheBox) {
                    element.style.left = e.clientX - element.x +"px";
                    element.style.top = e.clientY - element.y +"px";
                }
            }
    Normalement si je n'ai pas fais d'erreur inattention cela devrait fonctionn� � vous de me dire.
    Dans votre cas initial qui s�agissait de pourvoir d�placer trois div sachez que la m�thode querySelectorAll() retourne un Array compos� de tous les �l�ments r�pondant � la recherche CSS (donc vos 3 div )
    Pour l'objet Event que vous utilisez dans vos fonctions anonyme il existe une propri�t� target qui vous permet de r�cup�r� la r�f�rence de l'�l�ment sur lequel l'�v�nement � �t� appeler (surement utile dans le cas de plusieurs div d�pla�able).

  3. #3
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2012
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 83
    Par d�faut
    Merci de votre aide!

    J'ai donc fait �volu� mon code:
    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
    (function dragDrop() {
    	var element = document.querySelectorAll('.draggableBox');
    	var inTheBox = false, box; // Ne fonctionne pas si je mets box { };
     
    	document.addEventListener('mousedown', function(e) {
     
    		for(var i = 0; i < element.length && e.target != element[i]; ++i)
    			box = element[i];
    		if(i < element.length) {
    			box.x = e.clientX - box.offsetLeft;
    			box.y = e.clientY - box.offsetTop;	
    			inTheBox = true;
    		}
    	}, false);
     
    	// Semble ne pas reconnaître l'objet box.
    	box.addEventListener('mouseup', function() {
    		alert("test");
    		inTheBox = false;
    	}, false);
     
    	document.addEventListener('onmousemove', function(e) {	
    		if(inTheBox) {
    			box.style.left = e.clientX - box.x + "px";
    			box.style.top = e.clientY - box.y + "px";
    		}
    	}, false);
    })();
    Pr�visualisation du probl�me ici: http://jsfiddle.net/z99Ay/1/

    Je ne comprends pas pourquoi la fonction mouseup n'est pas prise en compte.

    Veuillez excuser l'abandon temporaire du post mais j'ai �t� exceptionnellement �loign� de mon PC.

  4. #4
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    dans ton code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    	// Semble ne pas reconnaître l'objet box.
    	box.addEventListener('mouseup', function() {
    		alert("test");
    		inTheBox = false;
    	}, false);
    pose toi la question de ce que vaut box au moment de l'ajout de l'�v�nement.

  5. #5
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    D�cembre 2012
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2012
    Messages : 83
    Par d�faut
    Bonjour et merci de votre aide!

    Il me semble que box vaut element[i] au moment de l'event. Soit le noeud-�l�ment que je souhaite d�placer non ?

  6. #6
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Il me semble que box vaut element[i] au moment de l'event.
    OUI

    Soit le noeud-�l�ment que je souhaite d�placer non ?
    NON en fait i valant � ce moment l� element.length, element[i] n'existe donc pas.

    Tu devrais affecter l'�v�nement dans la boucle
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function dragDrop() {
      var element = document.querySelectorAll('.draggableBox');
      var inTheBox = false,
          box; 
     
      for (var i = 0; i < element.length; i++) {
        box = element[i];
        box.addEventListener('mouseup', function () {
          alert("test");
          inTheBox = false;
        }, false);
      }
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Drag and drop "de l'ext�rieur"
    Par Invit� dans le forum C++Builder
    R�ponses: 12
    Dernier message: 31/03/2020, 10h10
  2. "Drag and drop" avec directinput
    Par batosai dans le forum DirectX
    R�ponses: 1
    Dernier message: 16/06/2004, 16h48
  3. [VB.NET] Microsoft TreeView drag and drop ?
    Par bigtoof dans le forum ASP.NET
    R�ponses: 7
    Dernier message: 24/05/2004, 14h50
  4. [JSP][DRAG AND DROP]
    Par hamed dans le forum Servlets/JSP
    R�ponses: 7
    Dernier message: 23/01/2004, 17h36
  5. drag and drop
    Par jujuesteban dans le forum Composants VCL
    R�ponses: 5
    Dernier message: 20/06/2003, 09h23

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