Code : Tout sélectionner
<script>
//1 variable pour mémoriser la source à déplacer : une référence sur le conteneur de la source à déplacer
var ImageToMove_Container = null;
//fonction qui mémorise le conteneur source
function setFirstImage(image){
ImageToMove_Container = image;
}
//fonction qui réalise le déplacement : permute l'url de la cible dans l'url du conteneur source et vis-versa
function setLastImage(image){
if (ImageToMove_Container != null){
//permutation des url de la source et la cible
var ImageToMove_src = ImageToMove_Container.src;
ImageToMove_Container.src = image.src;
image.src = ImageToMove_src;
//nettoyage de la mémoire
ImageToMove_Container = null;
}
}
</script>
<p></p>
<img id="image1" src="image1.gif" onMouseDown="setFirstImage(this);" onMouseOver="setLastImage(this);" />
<p></p>
<img id="image2" src="image2.gif" onMouseDown="setFirstImage(this);" onMouseOver="setLastImage(this);" />[/php]
Mais on peut généraliser pour tout conteneur HTML, en permutant le contenu HTML de 2 objets :
[php]<script>
//Source à déplacer
var objectToMove = null;
//fonction qui mémorise le conteneur source
function setFirstObject(object){
objectToMove = object;
}
//fonction qui réalise le déplacement
function moveTo(object){
if (objectToMove != null){
//permutation
var objectToMove_HtmlCopy = objectToMove.innerHTML;
objectToMove.innerHTML = object.innerHTML;
object.innerHTML = objectToMove_HtmlCopy;
//nettoyage de la mémoire
objectToMove = null;
}
}
</script>
<p></p>
<div onMouseDown="setFirstObject(this);" onMouseOver="moveTo(this);"><img src="image1.gif" /></div>
<div onMouseDown="setFirstObject(this);" onMouseOver="moveTo(this);"><img src="image2.gif" /></div>
Code : Tout sélectionner
<!-- Le script pour le déplacement du porteur d'objets-->
<script>
//fonction qui réalise le déplacement
function moveIt(where){ //where désigne tout objet couvert par le pointeur l'ors du déplacement
//cacher le porteur s'il est vide
if (document.getElementById("porteur").src == "http://localhost/objetsHtml/drag&drop/")
document.getElementById("porteur").style.visibility = "hidden";
else document.getElementById("porteur").style.visibility = "visible";
//déplacer le porteur avec le pointeur de la souris
document.getElementById("porteur").style.left = window.event.x ;
document.getElementById("porteur").style.top = window.event.y ;
//Mette en avant-plan l'objet déplacé sur celui couvert
document.getElementById("porteur").style.zIndex = 1;
if (where) where.style.zIndex = -1;
}
//Events pour la surface du document
document.onmousemove = moveIt; //mouvement pointeur
</script>
<!-- Les styles -->
<style>
.porteur {position:absolute; visibility:hidden; border-style:none; border-width:0; width:50; height:50}
</style>
<!-- Le porteur d'objet (vide par défaut) -->
<img id="porteur" src="http://localhost/objetsHtml/drag&drop/" class="porteur" style="left:100; top:100" onMouseMove="moveIt(this);" >
</img>
<!-- La cadre source d'objets -->
<div id="cadre" class="cadre" style="left:0; top:0">
<table>
<tr><td><img src="image1.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
<tr><td><img src="image2.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
<tr><td><img src="image1.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
<tr><td><img src="image2.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
<tr><td><img src="image1.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
<tr><td><img src="image2.gif" style="width:50; height:50" onMouseOver="cut_paste(this)" ></img></td></tr>
</table>
</div>
<!-- Le script -->
<script>
//pour l'interaction cadre sources/porteur
function cut_paste(object){
//passer les objets du cadre au porteur et vis-versa celon les cas (Echange d'objet)
//Cas 1. du cadre source vers le porteur (le porteur est vide)
if (object.src && !document.getElementById("porteur").src){
document.getElementById("porteur").src = object.src;
object.src = "";
}
//Cas 2. Echange du contenu entre cadre source et porteur (les deux ne sont pas vides)
else if (object.src && document.getElementById("porteur").src){
var tmp_src = object.src;
object.src = document.getElementById("porteur").src;
document.getElementById("porteur").src = tmp_src;
}
//Cas 3. du porteur au cadre source (le cadre est vide)
else if (!object.src && document.getElementById("porteur").src){
object.src = document.getElementById("porteur").src;
document.getElementById("porteur").src = "";
}
}
</script>Code : Tout sélectionner
<!-- Le script -->
<script>
//Source à déplacer
var objectToMove=null, dx=0, dy=0;
//fonction qui mémorise le conteneur source
function setObjectToMove(object){
objectToMove = object;
if (objectToMove && objectToMove.style && objectToMove.style.left && objectToMove.style.top){
//calculer l'écart pointeur et bords left/top pour stabiliser l'objet par rapport au pointeur l'ors du déplacement
dx = window.event.x - parseInt(object.style.left);
dy = window.event.y - parseInt(object.style.top);
//Events pour la surface du document
document.onmousemove = moveIt;
document.onmouseup = stopMovingIt;
}
}
//fonction qui réalise le déplacement
function moveIt(where){ //where désigne tout objet couvert par le pointeur l'ors du déplacement
if (objectToMove != null){
//fixer la position de l'objet à déplacer (en utilisant l'écart de stabilité)
objectToMove.style.left = window.event.x - dx;
objectToMove.style.top = window.event.y - dy;
//Mette en avant-plan l'objet déplacé sur celui couvert
objectToMove.style.zIndex = 1;
if (where) where.style.zIndex = -1;
}
}
function stopMovingIt(){
//nettoyage de la mémoire
objectToMove=null; dx=0; dy=0;
//et les Events
document.onmousemove=null;
document.onmouseup=null;
}
</script>
<!-- Les styles -->
<style>
.fenetre {position:absolute; border-style:solid; border-width:1; background-image:url(fenetre.gif); color:silver; width:444; height:355}
.titre {style-decoration:transprent; color:yellow; width:444; height:20; cursor:pointer; padding-left:30; padding-top:2; font-size:12; font-weight:bold}
.contenu {width:100%; height:100%}
</style>
<!-- Les fenêtres -->
<div id="fenetre1" class="fenetre" style="left:100; top:100" onMouseDown="setObjectToMove(this);" onMouseMove="moveIt(this);" onMouseUp="stopMovingIt();">
<div id="fenetre1_titre" class="titre" onMouseDown="setObjectToMove(this);" onMouseMove="moveIt(this);" onMouseUp="stopMovingIt();">
Fenêtre 1
</div>
<iframe id="fenetre1_contenu" src="http://localhost:80/" class="contenu"></iframe>
</div>
<div id="fenetre2" class="fenetre" style="left:200; top:200" onMouseDown="setObjectToMove(this);" onMouseMove="moveIt(this);" onMouseUp="stopMovingIt();">
<div id="fenetre2_titre" class="titre" onMouseDown="setObjectToMove(this);" onMouseMove="moveIt(this);" onMouseUp="stopMovingIt();">
Fenêtre 2
</div>
<iframe id="fenetre2_contenu" src="http://localhost/" class="contenu"></iframe>
</div>
AJAX...avez-vous une solution?
vicissitudes c'est le mot exact dans ce genre de situation. En fait, cette difficulté pourra être levée si on respecte le concept de base de données relationnelles et on sait que le modèle relationnel est ouvert à ce genre d'astuces.non ! je veux effectivement enregistrer le tri dans ma base en modifiant le champ ID dune table en fonction de l'ordre d'affichage..
je suis parvenu à une solution après pas mal de vicissitudes :
http://www.phpfrance.com/forums/voir_su ... -asc-0.php