Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Div trascinabile

  1. #1

    Div trascinabile

    Ho fatto uno script per trascinare un div.
    Il problema è che a volte nel trascinamento del div il mouse seleziona anche il testo presente nella tabella del layer più basso o il testo all'interno del div.
    Pensavo bastasse settare il cursore del div su move e mantenerlo sempre all'interno ma evidentemente a volte "sfugge".
    Suggerimenti?

    Codice PHP:
    <script>
    function 
    mouse_move(e) {
    if (!
    e) var window.event;

    if (
    e.clientX>51) {
    document.getElementById("messaggioinlettura").style.left = (e.clientX-50) +'px';
    } else{
    document.getElementById("messaggioinlettura").style.left '6';
    }

    if (
    e.clientY>51) {
    document.getElementById("messaggioinlettura").style.top = (e.clientY-50) +'px';
    } else {
    document.getElementById("messaggioinlettura").style.top '6';


    return 
    false;
    }


    function 
    stop_drag() {
    document.onmouseup=null;
    document.onmousemove=null;
    return 
    false
    }     

    </script> 
    Codice PHP:
    echo "<DIV  onMouseDown=\"document.onmouseup=stop_drag;document.onmousemove=mouse_move;\"  id='messaggioinlettura' class='missiva'>";
    echo 
    "</DIV>"

  2. #2
    ... nessuna idea?

    se mettessi un div semitrasparente grande quanto l'area?
    l'opacità presenta grane di compatibilità con ie-firefox-safari? me lo consigliate o no?

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    risolvi annullando determinati gestori evento all' inizio del drag e settandoli nuovamente a fine drag

    ora tu hai molto in linea e non mi suona troppo lineare, ma il senso e':

    discerni se il browser e' IE, salva in una variabile la funzione associata a quel gestore evento
    codice:
    onmousedown:
    	oldFunction=(IE)?document.onselectstart:document.onmousedown;
    	if(IE)document.onselectstart=function(){return false}
    	else document.onmousedown=function(){return false}
    onmouseup:
    	if(IE) document.onselectstart=oldFunction;
    	else document.onmousedown=oldFunction;
    ciao

  4. #4
    grazie per il suggerimento, purtroppo però se si trascina il div troppo velocemente, da ugualmente quella fastidiosa sensazione;
    ho messo una toppa legando la fine del trascinamento ad un secondo onmousedown del div anzichè all'onmouseup:
    1° click sul div= il div è reso trascinabile
    2° click sul div= il div viene ancorato

    Codice PHP:
    <script language="JavaScript" type="text/javascript">

    var 
    dragging=0,xdiff=0,ydiff=0;
    var 
    maniglia=document.getElementById('messaggio');

    function 
    dragger(e){
    maniglia=document.getElementById('messaggio');
    if (
    dragging<1){
    if (!
    e)  window.event;
    xdiff=e.clientX-parseInt(maniglia.style.left);
    ydiff=e.clientY-parseInt(maniglia.style.top);
    document.onmousemove=placer;
    dragging=1;
    maniglia.style.cursor="move";
    } else {
    document.onmousemove=null;
    dragging=0;
    maniglia.style.cursor="default";
    }
    }


    function 
    placer(e){
    if (!
    e)  window.event;
    maniglia.style.left = (e.clientX-xdiff) +'px';
    maniglia.style.top = (e.clientY-ydiff) +'px';
    }
    </script> 
    ovviamente con il div che fa da maniglia si chiama messaggio

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.