Redimensionner une image par drag/drop glissez/deplacez

Soyez le premier à donner votre avis sur cette source.

Vue 13 289 fois - Téléchargée 1 166 fois

Description

permet de redimensionner une image en cliquant dessus et en déplaçant la sourie.

il fonctionne sous ie5,ns4.8 et ns7.02, je l'ai testé !!

Source / Exemple :


<HTML>
<HEAD>
<SCRIPT language="javascript" TYPE="text/javascript">

var ie4 = document.all;
var ns4 = document.layers;
var ns6 = ((!ie4)&&(document.getElementById));

var monCalque;

function init()
{
 if(ns6)
 {
   document.addEventListener("mousedown",start, false); // on affecte une fonction à chaque evenement
   document.addEventListener("mousemove",drag, false);
   document.addEventListener("mouseup",drop, false);
 }
 else
 {
   if(ns4)
   {
     document.captureEvents(Event.MOUSEDOWN|Event.MOUSEMOVE|
                          Event.MOUSEUP) // on capture les evenements
   }
   document.onmousedown=start; // on affecte une fonction à chaque evenement
   document.onmousemove=drag;
   document.onmouseup=drop;
 }
}

function start(e)
{
 if (ns4)
 {
   monCalque=document.layers[e.target.name];
   if(monCalque)
   {
   imsrc = e.target.src;  // on recupere le nom de l'image
   imname = e.target.name; // le nom de la balise <img>
   imwidth = e.target.width; // sa taille initiale en X
   imheight = e.target.height;                  // en Y
   monCalque.X=monCalque.left; // sa place à gauche
   monCalque.Y=monCalque.top; // sa place en haut
   }
   return false;
 }
 else if (ie4)
 {
   monCalque=event.srcElement.parentElement;
   if(monCalque)
   {
   imsrc = event.srcElement.src;
   imname = event.srcElement.name;
   imwidth = event.srcElement.width;
   imheight = event.srcElement.height;
   monCalque.X=monCalque.style.left;
   monCalque.X=monCalque.X.substring(0,monCalque.X.length-2); // on supprime px à la fin de la chaine
   monCalque.Y=monCalque.style.top;
   monCalque.Y=monCalque.Y.substring(0,monCalque.Y.length-2); // on supprime px à la fin de la chaine
   }
 }
 else if (ns6)
 {
   monCalque=document.getElementById(e.target.name);
   if(monCalque)
   {
   imsrc = e.target.src;
   imname = e.target.name;
   imwidth = e.target.width;
   imheight = e.target.height;
   monCalque.X=monCalque.style.left;
   monCalque.X=monCalque.X.substring(0,monCalque.X.length-2);
   monCalque.Y=monCalque.style.top;
   monCalque.Y=monCalque.Y.substring(0,monCalque.Y.length-2);
   }
 }
}
function drag(e)
{
if(monCalque)
 {
    contenu =  '<img name="'+imname+'" border="1px" src="dummy.gif" width="'+ imwidth;  // dummy.gif pour une image vide.
    contenu += 'px" height="'+ imheight +'"></img>';                                    // border=1px pour voir un cadre.
  if (ns4)
  {
   imwidth = eval(e.pageX-monCalque.X);  // on recupere la nouvelle taille en X
   imheight = eval(e.pageY-monCalque.Y);                                // en Y
   monCalque.document.open();
   monCalque.document.write(contenu);
   monCalque.document.close();
  }
  else if ((ie4)&&(monCalque.id))
  {
   imwidth = eval(event.clientX-monCalque.X);  // on recupere la nouvelle taille en X
   imheight = eval(event.clientY-monCalque.Y);                                // en Y
    monCalque.innerHTML=contenu;
   return false;
  }
  else if ((ns6)&&(monCalque.id))
  {
   imwidth = eval(e.clientX-monCalque.X);   // on recupere la nouvelle taille en X
   imheight = eval(e.clientY-monCalque.Y);                                 // en Y
    monCalque.innerHTML=contenu;
   return false;
  }
 }
}

function drop(e)
{
if(monCalque)
 {
    contenu =  '<img name="'+imname+'" src="'+ imsrc +'" width="'+ imwidth;
    contenu += 'px" height="'+ imheight +'"></img>';

  if (ns4)
  {
   monCalque.document.open(); // on ouvre puis on ecrit le document
   monCalque.document.write(contenu);
   monCalque.document.close();
   monCalque=null;
  }
  else if ((monCalque.id))  // pour ie et ns>4
  {
   monCalque.innerHTML=contenu;  // on ouvre puis on ecrit le document
   monCalque=null;
   return false;
  }
 }
}
</SCRIPT>
</HEAD>

<BODY>
<DIV id="dgo" z-index="auto" style="position:absolute;left:5;top:10" > <!-- position:absolute necessaire pour ns4 -->
 <IMG name="dgo" src="irlande2.jpg" width="100px" height="101px"></DIV>
<DIV id="dgo2" z-index="auto" style="position:absolute;left:300;top:10" >
 <IMG name="dgo2" src="irlande.jpg" width="102px" height="103px"></DIV>
<SCRIPT> init();</SCRIPT>     <!--  déclenchement  ------->
</BODY>

</HTML>

Codes Sources

Ajouter un commentaire Commentaires
Messages postés
21
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
8 mars 2014

OK, nickel ! Je suis en train de rajouter la possibilité d'afficher la taille dans deux champs d'un formulaire afin de l'enregistrer dans une table d'une base access...
merci !
Messages postés
19
Date d'inscription
mardi 30 avril 2002
Statut
Membre
Dernière intervention
12 février 2004

pour afficher la taille de l'image il suffit de modifier la fonction drop :
on change contenu par :

contenu = '';
contenu += 'width='+ imwidth +'px height='+ imheight;

Voila.

pour garder le ratio il suffit de faire un coefficient à la fin de la fonction start :

coeff = imheight / (imwidth * 1.0);

puis on modifit la fonction drop et plus particuliérement contenu :

contenu = '';
contenu += 'width='+ imwidth +'px height='+ imwidth*coeff;

Voila !! @++ Mémîks
Messages postés
21
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
8 mars 2014

Le code fonctionne très bien... serai-il possible de récupérer les dimensions de l'image après modification ?
en les écrivant sous l'image par exemple ?
merci
Messages postés
419
Date d'inscription
dimanche 31 août 2003
Statut
Membre
Dernière intervention
19 avril 2010
1
bonjour,
est-t'il possible de conserver le ratio de l'image en l'agrandissant ?
ce serait assez genial .
merci.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.