Ho creato questa funzione per il drag and drop, che però ha un difetto:
(non badate agli addToEvent)
Di cui trovate un esempio in una pagina di provacodice://Funzioni per calcolare e settare le coordinate----------- function targetObj(evt) { return evt.target||evt.srcElement; } function coordX(evt) { return evt.pageX||evt.clientX+document.body.scrollLeft; } function coordY(evt) { return evt.pageY||evt.clientY+document.body.scrollTop } function setPosition(evt, el) { el.style.left=parseInt(el.style.left)+coordX(evt)-el.preX; el.style.top=parseInt(el.style.top)+coordY(evt)-el.preY; } //Funzioni per gestire gli eventi--------------------------------- function draggableDown(evt, el) { evt=evt||window.event; el.dragFlag=1; el.preX=coordX(evt); el.preY=coordY(evt); } function draggableMove(evt, el) { if(el.dragFlag) { evt=evt||window.event; setPosition(evt, el); el.preX=coordX(evt); el.preY=coordY(evt); } } //MAKEDRAGGABLE---------------------------------------------- function makeDraggable(posTarg, handlers) { var elemento=this; elemento.style.left=posTarg=="absolute"?elemento.offsetLeft:0; elemento.style.top=posTarg=="absolute"?elemento.offsetTop:0; elemento.style.position=posTarg; } //Aggiungi eventi a document----------------------------------- document.addToEvent("mousedown", function(e) { draggableDown(e, targetObj(e)); document.addToEvent("mousemove", function(e) { draggableMove(e, targetObj(e)) }); }); document.addToEvent("mouseup", function(e) { targetObj(e).dragFlag=0; });
Il problema ( potete provare pure voi ) è che se si muove il mouse troppo velocemente l'oggetto viene "sganciato".
Succede sia con IE che con FF e Opera.
Ho provato con return false e vari ma non ho trovato la soluzione al problema.

Rispondi quotando