Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583

    Comportamento anomalo nel drag & drop

    Ciao
    Devo spostare sei immagini sullo schermo e il drag&drop che sto usando si comporta in modo anomalo.
    Se sposto dei tag <DIV> il drag funziona come vorrei, mentre se sposto i tag <IMG> le immagini si sdoppiano. Rilasciando il pulsante del mouse l’immagine torna una e rimane appiccicata al cursore.
    I miei programmi sono destinati a bambini speciali ed è necessario che lo spostamento sia come quello dei DIV.
    La spiegazione non è molto chiara quindi ecco il listato:

    <
    codice HTML:
    !DOCTYPE html>
      <html lang="it">
      <head>
      <meta charset="utf-8"> 
      <meta http-equiv="imagetoolbar" content="no">
      <style type="text/css">
      body {background:#CCEEFF;}
      .qdr{width:200px;           height:100px;    cursor:hand; position:absolute;}
      .msgg {color:#000000; font-style:normal; font-size:28pt; font-weight:normal; font-family:Times new Roman, Arial, Verdana;}      
      </style>   
      <body id="Documento"> 
      <div id="box1" class="qdr" style="left:50px; top:60px; z-index: 2; background-color: #ff0000;" onmouseover="MausOver(1)"; onmousedown="MausDown(this);"></div>
      <div id="box2" class="qdr" style="left:450px; top:60px; z-index: 2; background-color: #0000ff;" onmouseover="MausOver(2)"; onmousedown="MausDown(this);"></div>
      <div id="box3" class="qdr" style="left:850px; top:60px; z-index: 2; background-color: #00ff00;" onmouseover="MausOver(3)"; onmousedown="MausDown(this);"></div>
       
      <img id="parte1" class="qdr" src="photo/foto1/f1.jpg" style="left:50px; top:300px;" z-index: 2; onmouseover="MausOver(4)"; onmousedown="MausDown(this);">
      <img id="parte2" class="qdr" src="photo/foto1/f2.jpg" style="left:450px; top:300px;" z-index: 2; onmouseover="MausOver(5)"; onmousedown="MausDown(this);" src="photo/foto1/f2.jpg">
      <img id="parte3" class="qdr" src="photo/foto1/f3.jpg" style="left:850px; top:300px;" z-index: 2; onmouseover="MausOver(6)"; onmousedown="MausDown(this);" src="photo/foto1/f3.jpg">
       
      <span id="Messaggio" class="msgg" style="width:810px; height:42px; position:absolute; left:223px; top:540px; z-index:2; background-color:#FF0000; text-align:center;"></span>               
       
      <script type="text/javascript">
       
      var oggetto = null;        //Inizializzo l'oggetto da spostare
      var mouseX = 0;            //Le due variabili che archiviano la posizione cursore mouse
      var mouseY = 0;
      var elementoX = 0;         //Le due variabili che archiviano la posizione dell'elemento
      var elementoY = 0;
      var psX = 0
      var psY = 0
      var posizX = new Array(6)
      var posizY = new Array(6)
      var figmossa = 0
       
      window.onload=function()  {  
      document.getElementById("Documento").focus();
      InizializzaMovimento()
      }; 
       
      function InizializzaMovimento() {        //Collega le due funzioni muovi e ferma
      document.onmousemove = Muovi;
      document.onmouseup = Ferma;
      }
       
      function Ferma() {          //Distrugge l'oggetto quando siamo fermi
       oggetto = null;
       posizX[figmossa] = psX     // Le coordinate dell'oggetto mosso
       posizY[figmossa] = psY
      }
       
      function Muovi(pg) {        // Stai muovendo il mouse
       mouseX = document.all ? window.event.clientX : pg.pageX;
       mouseY = document.all ? window.event.clientY : pg.pageY;
       if(oggetto != null) { 
         psX = mouseX - elementoX; 
         psY = mouseY - elementoY;
         oggetto.style.left = psX + "px";
         oggetto.style.top = psY + "px";
       }
      }
       
      function MausDown(ele) {      // Ho premuto il tasto sinistro del mouse
       oggetto = ele;          
       elementoX = mouseX - oggetto.offsetLeft;    // memorizzo la posizione dell'elemento che deve essere spostato
       elementoY = mouseY - oggetto.offsetTop;     // le iniziali di Left e Top devono essere maiuscole  
      }
       
      function MausOver(x) {
      figmossa = x
      Messaggio.innerHTML = "sto muovendo la figura " + figmossa
      }
       
      </script>
      </body>
      </html>



    Ho provato a mettere le img dentro un div ma non cambia nulla
    rudyF

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583
    ciao
    ho risolto mettendo le immagini come sfondo dei div, ma
    come si fa a cambiare l'immagine di background dei div tramite javascript?

    document.getElementById(parte1).style.background = "url(photo/foto" + fotoN + "/f1.jpg)"
    così non va!

  3. #3
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    A) Hai il tag <head> aperto ma non chiuso (in alcuni browser potrebbe dare noia)
    b) Se usi window.onload non devi inserire il codice js dopo gli elementi del documento (è ridondante o fai uno o fai l'altro) e nel caso optasti per window.onload meglio mettere il codice tra i tag head cosi da rendere il documento più leggibile
    c) non riferirti agli oggetti del documento in forma contratta Messaggio.innerHTML/oggetto.style.left alcuni browser non la riconoscono sempre meglio usare il DOM document.getElementById(.......)
    Per quello che stai facendo credo sia meglio usare jquery e jquery-ui avrai meno problemi di compatibilità sia per i browser per PC che per i browser tablet e smartphone
    Non mi risulta che le immagini non supportino il drag &drop, l'anomalia la risconti in tutti i browser? La console degli errori restituisce qualcosa?
    document.getElementById(parte1).style.backgroundImage = "url(photo/foto" + fotoN + "/f1.jpg)"
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583
    ciao
    risposta molto esauriente

    la mancata chiusura dell'head è stata una dimenticanza.
    Mettere lo script nel body dopo i vari tag html è un'abitudine da quando un programma non funzionava perché chiamava un oggetto html e questo non era ancora stato disegnato. Mettendo lo script nel body questo non è mai più successo.
    Pensavo che window.onload fosse l'inizio dell'esecuzione dello script altrimenti dovrei mettere una chiamata alla prima function in fondo allo script per non incorrere nel problema descritto prima.
    Credevo che il riferimento agli oggetti in forma contratta fosse uguale alla forma estesa. Da ora in poi userò questa forma.
    L'anomalia riscontrata col drag&drop succede con Internet Explorer. La console degli errori non dice niente. (non è attivata. Non so come attivarla!)
    Nel mio computer ho solo questo browser. I miei utenti non conoscono la differenza tra i vari browser perché per i figli comprano il computer economico al supermercato e questi computer usano tutti IE.

    document.getElementById(parte1).style.backgroundIm age = "url(photo/foto" + fotoN + "/f1.jpg)" a me non funziona.
    lo script si blocca !

    Nello style del div è scritto "background-image:url(photo/foto1/f1.jpg)"
    Lì funziona, nello script no.

    Scusami se rompo.
    rudyF

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583
    lo so che è impossibile
    ma

    function ScegliPersonaggio(psg) {
    document.getElementById(parte1).style.backgroundIm age = "url(photo/foto" + psg + "/f1.jpg)";
    document.getElementById(parte2).style.backgroundIm age = "url(photo/foto" + psg + "/f2.jpg)";
    document.getElementById(parte3).style.backgroundIm age = "url(photo/foto" + psg + "/f3.jpg)";
    }

    così non funziona. l'esecuzione si blocca
    mentre così funziona

    function ScegliPersonaggio(psg) {
    parte1.src="photo/foto" + psg + "/f1.jpg";
    parte2.src="photo/foto" + psg + "/f2.jpg";
    parte3.src="photo/foto" + psg + "/f3.jpg";
    }

    come si spiega?
    rudyF

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583
    Attenzione
    lo spazio in backgroundIm age
    l'ha messo il computer quando ho spedito la risposta
    nello script è scritto bene.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    document.getElementById(parte1)

    ci vogliono gli apici

    document.getElementById('parte1')

    Questi errori vengono segnalati nella console, per aprirla premi F12

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    583
    molte grazie
    rudyF

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.