Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Drag and Drop] Difficoltà con mouse troppo veloce

    Ho creato questa funzione per il drag and drop, che però ha un difetto:
    (non badate agli addToEvent)
    codice:
    //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;
    	});
    Di cui trovate un esempio in una pagina di prova

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    la libreria di questo tizio non soffre dello stesso problema

    http://www.walterzorn.com/dragdrop/dragdrop_e.htm

    magari leggi un po' come ha fatto lui e vedi che discrepanze, se grosse, ci sono col tuo codice.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie del consiglio, attraverso questa "tattica del confronto" ho notato che molti script per il drag and drop, dopo aver utilizzato una varaibile come riferimento all'oggetto la settano a null...
    Vedo se riesco ad adattare il mio script, qualsiasi aiuto è ben accetto.

  4. #4
    Ho risolto mantenendo il riferimento al target nel mousedown e usando lo stesso al mousemove, invece che ricalcolare il target.

    E' bastato modificare l'ultima parte:
    codice:
    document.addToEvent("mousedown", function(e) {
    	//-----------Conserva il target per non perderlo al mouseup-------
    	var draggable=targetObj(e);
    	//-----------Rende draggable immobile al suo mouseup-----------			
    	draggable.addToEvent("mouseup", function() { this.dragFlag=0; });	
    			draggableDown(e, draggable);
    
    			document.addToEvent("mousemove", function(e) {
    					draggableMove(e, draggable)
    					});
    		});

    Lo script, dopo che verrà opportunamente riveduto, sostituirà il vecchio nella libreria ExtendDOM

  5. #5
    Originariamente inviato da Andrea1979
    la libreria di questo tizio non soffre dello stesso problema
    ma nemmeno bytefx
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Originariamente inviato da andr3a
    ma nemmeno bytefx
    E ci credo, l'hai fatta tu
    La mia soffre ancora di alcuni problemi di ottimizzazione ( l'evento di document viene settato più volte inutilmente ad esempio ), inoltre devo studiare il modo di limitare il drag and drop a una regione limitata.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da andr3a
    ma nemmeno bytefx
    Non la conoscevo, o magari non sono stato attento ho googlate drag & drop molti mesi orsono ed è spuntata quella libreria che mi pareva degna... non mi sono più preoccupato di altre
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.