Cet article a pour but de vous expliquer comment déplacer à volonté un div avec la souris ... Ce script en JavaScript est compatible Internet Explorer, Netscape 4.x et Netscape 6.
Programmation > JavaScript
Recherche :   
Actualité Système Salon Concours Outils Programmation Devparadise Programmation HTML .Net JavaScript VBScript ASP PHP Visual Basic Perl Java Active X SQL XML WAP Delphi Graphisme Flash Web Design Promotion Référencement Publicité Valeur de votre site Outils Systèmes Windows Unix Linux Benchmark Hardware Réseaux locaux Droit Sécurité
Déplacer un Div avec la Souris
  Auteur : Fabrice TABARY

Cet article a pour but de vous expliquer comment déplacer à volonté un div avec la souris ... Ce script en JavaScript est compatible Internet Explorer, Netscape 4.x et Netscape 6.

Publicité 
Avouez que ce serait bien que vous puissiez avoir sur votre site une fenêtre sur laquelle on pourrait faire un 'drag & drop' ...

C'est un peu compliqué à réaliser car la programmation n'est pas la même pour Internet Explorer, pour Netscape 4.x et pour Netscape 6, mais c'est faisable. Voilà comment :

Nous allons donc avoir 2 choses :
    - 1 Div à faire bouger, que l'on déclare comme cela (dans le BODY) :

    <script language="JavaScript">

      var ie = (document.all)? true:false;
      var ns4 = (document.layers)? true:false;
      var ns6 = (document.getElementById)? true:false;
      if ((ns6) || (ie)) {
        document.write("<div id='mon_div' style='position:absolute; width:160; top:30; left:0; background-color:#606060;'>CECI EST MON DIV</div>");
      } else if (ns4) {
        document.write("<layer id='mon_div' width=160 top=30 left=0 bgcolor='#606060'>CECI EST MON DIV</layer>");
      }
    </script>

    - et une souris...
Pour faire bouger le div avec la souris, il nous faut récupérer l'évènement 'appuyer sur le bouton de la souris' sur le div, puis l'évènement du 'déplacement de la souris pendant que le bouton est enfoncé', et enfin l'évènement 'relacher le bouton de la souris'.

Pour cela, on utilise :
    onmousedown : appuyer sur le bouton de la souris
    onmousemove : déplacement de la souris
    onmouseup : relacher le bouton de la souris
Voici, dans la fonction start, comment s'utilise le onmousedown :
Cette fonction doit être exécutée en premier, on pensera donc à mettre : <body onload="start()">

//Init des variables,des Divs-Layers, et du onmousedown
function start() {

    if (ie) {
      // lance ma_fonction quand on appuie sur le bouton de la souris
      mon_div.onmousedown= ma_fonction;
    }else if (ns4) {
      // lance ma_fonction quand on appuie sur le bouton de la souris
      document.captureEvents(Event.MOUSEDOWN);
      document.onmousedown=ma_fonction;
    }else if (ns6) {
      // lance ma_fonction quand on appuie sur le bouton de la souris
      document.getElementById("mon_div").addEventListener("mousedown",ma_fonction, false);
    }
}

C'est somme toute assez simple. La fonction attend maintenant que l'évenement se réalise. Notez quand même que sous Ns6 on est obligé de créer une liste d'évenement avec 'addEventListener' pour ensuite indiquer la fonction à éxécuter lors de l'évenement

Donc, voyons maintenant ce qui se passe quand nous cliquons sur le bouton de la souris :

// Paramétrage du déplacement des Divs-Layers et des onmousemove & onmouseup pendant le onmousedown
// le (e) indique au programme qu'il utilise les évenements.

function ma_fonction(e) {

    if (ie) {
      //Récupération de la position de la souris
      window.lastX=event.clientX;
      window.lastY=event.clientY;
      // lance doDrag tant que l'on appuie sur le bouton de la souris en la bougeant
      document.onmousemove=doDrag;
      // lance endDrag quand on relache le bouton de la souris
      document.onmouseup=endDrag;
    }else if (ns4) {
      //Récupération de la position de la souris
      window.lastX=e.pageX;
      window.lastY=e.pageY;
      // lance doDrag tant que l'on appuie sur le bouton de la souris en la bougeant
      document.captureEvents(Event.MOUSEMOVE)
      document.onmousemove=doDrag;
      // lance endDrag quand on relache le bouton de la souris
      document.captureEvents(Event.MOUSEUP)
      document.onmouseup=endDrag;
    }else if (ns6) {
      //Récupération de la position de la souris
      window.lastX=e.clientX;
      window.lastY=e.clientY;
      // lance doDrag tant que l'on appuie sur le bouton de la souris en la bougeant
      window.onmousemove=doDrag;
      // lance endDrag quand on relache le bouton de la souris
      window.onmouseup=endDrag;
    }
}

Le programme sait donc maintenant ce qu'il doit faire pour chaque évenement.
Maintenant, il ne nous reste plus qu'à paramétrer le déplacement du div :

// Déplacement des Divs-Layers
function doDrag(e) {

    if (ie4) {
      // Calcul de l'écart de position de la souris
      var difX=event.clientX-window.lastX;
      var difY=event.clientY-window.lastY;
      //Récupération de la position du div et ajout de l'écart de position de la souris
      var newX1 = parseInt(mon_div.style.left)+difX;
      var newY1 = parseInt(mon_div.style.top)+difY;
      // Assignation des nouvelles coordonnées au div
      mon_div.style.left=newX1+"px";
      mon_div.style.top=newY1+"px";
      //Assignation de l'anciènne position de la souris
      window.lastX=event.clientX;
      window.lastY=event.clientY;
    }else if (ns4) {
      // Calcul de l'écart de position de la souris
      var difX=e.pageX-window.lastX;
      var difY=e.pageY-window.lastY;
      //Récupération de la position du div et ajout de l'écart de position de la souris
      var newX1 = parseInt(document.layers.mon_div.left)+difX;
      var newY1 = parseInt(document.layers.mon_div.top)+difY;
      // Assignation des nouvelles coordonnées au div
      document.layers.mon_div.left=newX1;
      document.layers.mon_div.top=newY1;
      //Assignation de l'anciènne position de la souris
      window.lastX=e.pageX;
      window.lastY=e.pageY;
    }else if (ns6) {
      // Calcul de l'écart de position de la souris
      var difX=e.clientX-window.lastX;
      var difY=e.clientY-window.lastY;
      //Récupération de la position du div et ajout de l'écart de position de la souris
      var newX1 = parseInt(document.getElementById("mon_div").style.left)+difX;
      var newY1 = parseInt(document.getElementById("mon_div").style.top)+difY;
      // Assignation des nouvelles coordonnées au div
      document.getElementById("mon_div").style.left=newX1+"px";
      document.getElementById("mon_div").style.top=newY1+"px";
      //Assignation de l'anciènne position de la souris
      window.lastX=e.clientX;
      window.lastY=e.clientY;
    }
}

Et pour finir, voici la fonction qui traite le relachement du bouton :

function endDrag(e) {

    if (ie || ns4) {
      //Réinitialisation du onmousemove
      document.onmousemove=null;
    }else if (ns6) {
      //Réinitialisation du onmousemove
      window.onmousemove=null;
    }
}

A vous maintenant de reprendre tout ces éléments et de les personnaliser afin d'agrémenter un peu plus votre site ...

Une fenêtre sur le même principe et plus élaboré est disponible en download dans la logithèque : 'Déplacer un Div avec la Souris'.

A lire aussi sur Devparadise.com :
  • Ajouter une barre de navigation
  • Boîtes de contenu flottantes
  • Sauvegarder les pièces jointes des messages d'un dossier Outlook
  • Ajuster dynamiquement la taille d'une fenêtre
  • Utilisation de la palette pathfinder d'Illustrator
  • A télécharger aussi sur Devparadise.com :
  • source de l'article "Boîtes de contenu flottantes"
  • Source: Sauvegarder les pièces jointes des messages d’un dossier Outlook
  • xdebug 1.3.0rc1
  • Zend Optimizer
  • filtre ISAPI FastCGI pour IIS

  • © 1997-2005 tous droits réservés Devparadise.com
    Les logos, et marques déposées sont la propriété de leurs détenteurs respectifs.
    Devparadise.com s'est engagé à respecter la confidentialité des données personnelles régies par la loi 78-17 du 6 janvier 1978.
    Déclaration C.N.I.L. n° 621623
    script,javascript,drag,div