// +-------------------------------------------------+ // © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net) // +-------------------------------------------------+ // $Id: drag_n_drop.js,v 1.5 2009-01-19 16:20:49 kantin Exp $ draggable=new Array(); recept=new Array(); //state=""; is_down=false; dragup=true; posxdown=0; posydown=0; current_drag=null; dragged=null; r_x=new Array(); r_y=new Array(); r_width=new Array(); r_height=new Array(); //Trouve la position absolue d'un objet dans la page function findPos(obj) { var curleft = curtop = 0 if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft; curtop += obj.offsetTop; } } return [curleft,curtop]; } //Récupère les coordonnées du click souris function getCoordinate(e) { var posx = 0; var posy = 0; if (!e) var e = window.event; if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else if (e.clientX || e.clientY) { posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } return [posx,posy]; } //Handler : Click sur un élément draggable function mouse_down_draggable(e) { //On annule tous les comportements par défaut du navigateur (ex : sélection de texte) if (!e) var e=window.event; if (e.stopPropagation) { e.preventDefault(); e.stopPropagation(); } else { e.cancelBubble=true; e.returnValue=false; } //Récupération de l'élément d'origine qui a reçu l'évênement if (e.target) var targ=e.target; else var targ=e.srcElement; //On nettoie tout drag en cours posxdown=0; posydown=0; is_down=false; if (current_drag) current_drag.parentNode.removeChild(current_drag); current_drag=null; dragged=null; //Recherche du premier parent qui a draggable comme attribut while (targ.getAttribute("draggable")!="yes") { targ=targ.parentNode; } //On stocke l'élément d'origine dragged=targ; //Stockage des coordonnées d'origine du click var pos=getCoordinate(e); posxdown=pos[0]; posydown=pos[1]; //Il y a un élément en cours de drag ! is_down=true; //Appel de la fonction callback before si elle existe if (targ.getAttribute("callback_before")) { eval(targ.getAttribute("callback_before")+"(targ,e)"); } //Création du clone qui bougera create_dragged(targ); } //Evênement : passage au dessus d'un élément draggable : on affiche un // petit symbole pour signifier qu'il est draggable function mouse_over_draggable(e) { if (!e) var e=window.event; if (e.target) var targ=e.target; else var targ=e.srcElement; //Recherche du premier parent qui a draggable while (targ.getAttribute("draggable")!="yes") { targ=targ.parentNode; } //On met un petit symbole "drap" //Recherche de la position var pos=findPos(targ); var posPere=findPos(targ.parentNode); //Création d'un
au dessu de l'élement var drag_symbol=document.createElement("div"); drag_symbol.setAttribute("id","drag_symbol_"+targ.getAttribute("id")); drag_symbol.style.position="absolute"; drag_symbol.style.top=pos[1]+"px"; drag_symbol.style.zIndex=1000; img_symbol=document.createElement("img"); img_symbol.setAttribute("src","images/drag_symbol.png"); drag_symbol.appendChild(img_symbol); var decalage=pos[0]-posPere[0]; if((targ.offsetWidth+img_symbol.width+decalage)r_x[i])&&(pos[0]r_x[i])&&((parseFloat(pos[0])+parseFloat(current_drag.offsetWidth))r_y[i])&&(pos[1]r_y[i])&&((parseFloat(pos[1])+parseFloat(current_drag.offsetHeight))