Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Drag and drop

  1. #1

    Drag and drop

    Ciao a tutti.
    Premetto che sono poco pratico di javascript e php.
    Ho il seguente problema.
    Ho creato una pagina web che ha come sfondo un campo di calcio visto dall'alto e in una zona di questa pagina ci sono delle immagini di calciatori.
    Ho utilizzato lo script seguente preso da uno dei tanti siti che li mettono a disposizione per fare in modo che tali immagini di calciatori siano "draggabili" all'interno della mia pagina web e quindi del campo di calcio. Lo script è questo:
    <code>
    <style type="text/css">

    .drag{
    position:relative;
    cursor:hand;
    z-index: 100;
    }

    </style>

    <script type="text/javascript">

    var dragobject={
    z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
    initialize:function(){
    document.onmousedown=this.drag
    document.onmouseup=function(){this.dragapproved=0}
    },
    drag:function(e){
    var evtobj=window.event? window.event : e
    this.targetobj=window.event? event.srcElement : e.target
    if (this.targetobj.className=="drag"){
    this.dragapproved=1
    if (isNaN(parseInt(this.targetobj.style.left))){this. targetobj.style.left=0}
    if (isNaN(parseInt(this.targetobj.style.top))){this.t argetobj.style.top=0}
    this.offsetx=parseInt(this.targetobj.style.left)
    this.offsety=parseInt(this.targetobj.style.top)
    this.x=evtobj.clientX
    this.y=evtobj.clientY
    if (evtobj.preventDefault)
    evtobj.preventDefault()
    document.onmousemove=dragobject.moveit
    }
    },
    moveit:function(e){
    var evtobj=window.event? window.event : e
    if (this.dragapproved==1){
    this.targetobj.style.left=this.offsetx+evtobj.clie ntX-this.x+"px"
    this.targetobj.style.top=this.offsety+evtobj.clien tY-this.y+"px"
    return false
    }
    }
    }

    dragobject.initialize()

    </script>
    </code>

    inserito all'interno dei tag head.
    Funziona alla perfezione.
    La cosa che vorrei fare è però quella di memorizzare in un database le coordinate x ed y di tali immagini, dopo che un visitatore ha creato la sua formazione spostando i calciatori all'interno del campo di calcio, di modo che il visitatore successivo visualizzi la formazione creata da quello precedente.
    Ho letto in vari forum la possibilità di usare i cookie ma a me non serve che lo stesso visitatore ogni volta che apre la pagina veda la formazione che lui stesso ha creato bensì che ciascuno visualizzi la formazione creata dal visitatore precedente.
    La mia idea era quella, per la prima visualizzazione della pagina, cioè come la vedrà il primo visitatore, di impostare i valori di default per la posizione delle immagini in un database e di fare in modo che la posizione di ogni immagine venga prelevata da da tale database e richiamata nella pagina php che dovrà andare a pescare le cooridnate di ciascuna immagine dai campi della tabella.
    Fatto ciò vorrei tramite php o in qualche altro modo sovrascirvere nel database i nuovi valori di coordinate che non sono altro che i valori delle variabili this.targetobj.style.left e this.targetobj.style.top di modo che il visitatore successivo aprirà la pagina, e visto che le posizioni delle immagini vengono caricate dal database, visualizzerà la formazione creata dall'utente precedente.
    Per essere più chiaro è possibile visitare la pagina che ho creato in cui le foto sono draggabili al seguente indirizzo:
    http://vgsangiuliano.altervista.org/formazione.html
    Ovviamente in tale pagina la posizione di default delle immagini è quella ottenuta inserendole in appositi tag td.
    Avrei bisogno di sapere quindi come fare a modificare il codice della pagina per fare le seguenti cose:
    1- All'apertura via browser della pagina le coordinate di ciascun div all'interno dei quali è contenuta ciascuna immagine di calciatore devono essere caricate da una tabella di un database che ha una struttura tipo idimmagine(key), posizione x e posizione y.
    2- Ogni volta che un visitatore sposta all'interno del campo di calcio ujn'immagine i valori di this.targetobj.style.left e this.targetobj.style.top calcolati dal javascript postato devono andare a sovrascrivi i valori precednti salvati nel database

    In questo modo ogni qualvolta viene aperta la pagina, visto che le coordinate delle immagini vengono caricate dal database il visitatore vedrà sempre la formazione creata dal visitatore precedente.
    Per fare tutto ciò chiedo se possibile il vostro aiuto perchè a spiegarlo a parole sono capace ma il problema è tradurre tutto ciò in "codice informatico".
    Potete aiutarmi?
    Ps Mi scuso per aver scritto un poema e per non essere stato conciso.
    Grazie a tutti.

  2. #2
    Ho quasi trovato il modo per fare quello che dicevo prima solo che non so come fare per assegnare ad una variabile php il valore di una variabile javascript qualcuno può aiutarmi?
    Ho evidenziato in rosso quello che vorrei fare, ovviamente mi da errore. Grazie a tutti

    <style type="text/css">

    .drag{
    position:relative;
    cursor:hand;
    z-index: 100;
    }

    </style>

    <script type="text/javascript">

    var dragobject={
    z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
    initialize:function(){
    document.onmousedown=this.drag
    document.onmouseup=function(){this.dragapproved=0}
    },
    drag:function(e){
    var evtobj=window.event? window.event : e
    this.targetobj=window.event? event.srcElement : e.target
    if (this.targetobj.className=="drag"){
    this.dragapproved=1
    if (isNaN(parseInt(this.targetobj.style.left))){this. targetobj.style.left=0}
    if (isNaN(parseInt(this.targetobj.style.top))){this.t argetobj.style.top=0}
    this.offsetx=parseInt(this.targetobj.style.left)
    this.offsety=parseInt(this.targetobj.style.top)
    this.x=evtobj.clientX
    this.y=evtobj.clientY
    if (evtobj.preventDefault)
    evtobj.preventDefault()
    document.onmousemove=dragobject.moveit
    }
    },
    moveit:function(e){
    var evtobj=window.event? window.event : e
    if (this.dragapproved==1){
    this.targetobj.style.left=this.offsetx+evtobj.clie ntX-this.x+"px"
    this.targetobj.style.top=this.offsety+evtobj.clien tY-this.y+"px"

    <?php $xpos?>=this.targetobj.style.left
    <?php $ypos?>=this.targetobj.style.top

    return false
    }
    }
    }

    dragobject.initialize()

    </script>

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Per salvare le posizioni ti conviene creare un form con tutti campi hidden (2 per ogni giocatore,x e y) e aggiungere un bel submit "Salva formazione". In questo modo avrai i valori delle coordinate nel vettore $_POST di php e ci farai quel che credi (salvarlo in database per usi futuri ad esempio)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Grazie andrea è solo che sono una schiappa e non ho idea di come fare quello che mi dici.
    Puoi darmi una mano?
    Ad esempio come faccio a far salvare in automatico nel form le posizioni x ed y?
    E' perfetto quello che mi suggerisci, il mio problema è che non so come riempire il vettore $_Post dopo credo di essere in grado di andare avanti da solo
    grazie mille

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    <style type="text/css">
    
    .drag{
    position:relative;
    cursor:hand;
    z-index: 100;
    }
    
    </style>
    
    <script type="text/javascript">
    
    var dragobject={
    z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
    initialize:function(){
    document.onmousedown=this.drag
    document.onmouseup=function(){this.dragapproved=0}
    },
    drag:function(e){
    var evtobj=window.event? window.event : e
    this.targetobj=window.event? event.srcElement : e.target
    if (this.targetobj.className=="drag"){
    this.dragapproved=1
    if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    this.offsetx=parseInt(this.targetobj.style.left)
    this.offsety=parseInt(this.targetobj.style.top)
    this.x=evtobj.clientX
    this.y=evtobj.clientY
    if (evtobj.preventDefault)
    evtobj.preventDefault()
    document.onmousemove=dragobject.moveit
    }
    },
    moveit:function(e){
    var evtobj=window.event? window.event : e
    if (this.dragapproved==1){
    this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    
    
    //Aggiunta
    var imgpath = this.targetobj.src;
    var fieldname = imgpath.substring(imgpath.lastIndexOf("/")+1, imgpath.length-4);
    document.saveformazione.elements[fieldname+"_x"].value=this.offsetx+evtobj.clientX-this.x;
    document.saveformazione.elements[fieldname+"_y"].value=this.offsety+evtobj.clientY-this.y;
    //la riga seguente è solo di debug, a script finito si può eliminare.
    document.saveformazione.testo.value=fieldname+" X = "+document.saveformazione.elements[fieldname+"_x"].value+" Y = "+document.saveformazione.elements[fieldname+"_y"].value;
    //Fine aggiunta
     
    return false
    }
    }
    }
    
    dragobject.initialize()
    
    </script>
    e poi nel codice html della pagina, prima del tag script e dopo la tabella (immagino che sia per disegnare il campo)

    codice:
    <form name="saveformazione">
    
    
    
    
    <input type="hidden" name="gigimedia_x" />
    <input type="hidden" name="gigimedia_y" />
    
    
    <input type="text" value="" name="testo" />
    </form>
    Comunque il problema fin'ora era di javascript. Da adesso in poi sarà di PHP
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    grazie mille andrea proverò a fare quello che mi hai detto, spero di esserne capace.
    Dove scrivi manca form action devo scrivere il file php al quale invio i dati?

    Cosa intendi per ora è un problema di php?
    Ti invio il codice completo della pagina che sto testando.
    Ho "attivato" solo una immagine per provare.
    Non riesco a capire dove mettere il form. Ho provato a spostare come suggerisci tu lo script fuori dai tag head (da dove lo ho scaricato dicevano di inserirlo prima di </head>.
    Ho tirato fuori questa pagina.
    E' corretta. Nel form di debug che mi ha messo vedo le coordinate quando draggo l'immagine. Credo quindi che tu mi abbia risolto il problema perchè mi basta vedere un pò come funziona l'Action di modo che invio le coordinate ad un file php che si occuperà di inserirle nel database.
    Grazie mille

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-ev="Content-Language" content="it">
    <title>LA FORMAZIONE</title>
    <meta http-ev="Content-Type" content="text/html; charset=windows-1252">
    <meta name="keywords" content="calcio,calcio a 7,kickoff,torneo,sangiuliano,fantacalcio,classifica,calendario,risultati,san giuliano,kick off">
    <meta http-ev="expires" content="0">
    
    
    
    </head>
    
    
    <body link ="#FF9933" vlink="#FF9933" alink="#FF9933" style="background-color: #FFFFFF" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" OnLoad="window.defaultStatus='VG Sangiuliano Official Website';">
    <style> a {text-decoration: none}</style>
    <div align="center">
    <table border="0" cellpadding="0" cellspacing="0" width="640" height="1">
    <tr><td width="640" height="1"></td></tr>
    </table>
    <table border="0" cellpadding="0" cellspacing="0" width="640" height="148">
    <tr>
    <td width="20" height="148" rowspan="2"></td>
    <td width="100" height="74">
    
    [img]squadra/gigimedia.jpg[/img]
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="20" height="148" rowspan="2"></td>
    </tr>
    <tr>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    <td width="100" height="74">
    
    
    
    </td>
    </tr>
    </table>
    
    <table border="0" cellpadding="0" cellspacing="0" width="640" height="333">
    <!--<tr>
     <td>[img]squadra/shim.gif[/img]</td>
      <td>[img]squadra/shim.gif[/img]</td>
      <td>[img]squadra/shim.gif[/img]</td>
      <td>[img]squadra/shim.gif[/img]</td>
      <td>[img]squadra/shim.gif[/img]</td>
     <td>[img]squadra/shim.gif[/img]</td>
     </tr>-->
     <tr>
     <td align="center" width="128" height="111" background="squadra/split_C1_R1.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C2_R1.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C3_R1.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C4_R1.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C5_R1.jpg"></td>
      
     </tr>
     <tr>
     <td align="center" width="128" height="111" background="squadra/split_C1_R2.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C2_R2.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C3_R2.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C4_R2.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C5_R2.jpg"></td>
    
     </tr>
     <tr>
     <td align="center" width="128" height="111" background="squadra/split_C1_R3.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C2_R3.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C3_R3.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C4_R3.jpg"></td>
     <td align="center" width="128" height="111" background="squadra/split_C5_R3.jpg"></td>
     
     </tr>
    </table>
    
    
    <form name="saveformazione">
    
    
    
    
    <input type="hidden" name="gigimedia_x" />
    <input type="hidden" name="gigimedia_y" />
    
    
    <input type="text" value="" name="testo" />
    </form>
    
    
    
    <style type="text/css">
    
    .drag{
    position:relative;
    cursor:hand;
    z-index: 100;
    }
    
    </style>
    
    <script type="text/javascript">
    
    var dragobject={
    z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
    initialize:function(){
    document.onmousedown=this.drag
    document.onmouseup=function(){this.dragapproved=0}
    },
    drag:function(e){
    var evtobj=window.event? window.event : e
    this.targetobj=window.event? event.srcElement : e.target
    if (this.targetobj.className=="drag"){
    this.dragapproved=1
    if (isNaN(parseInt(this.targetobj.style.left))){this.targetobj.style.left=0}
    if (isNaN(parseInt(this.targetobj.style.top))){this.targetobj.style.top=0}
    this.offsetx=parseInt(this.targetobj.style.left)
    this.offsety=parseInt(this.targetobj.style.top)
    this.x=evtobj.clientX
    this.y=evtobj.clientY
    if (evtobj.preventDefault)
    evtobj.preventDefault()
    document.onmousemove=dragobject.moveit
    }
    },
    moveit:function(e){
    var evtobj=window.event? window.event : e
    if (this.dragapproved==1){
    this.targetobj.style.left=this.offsetx+evtobj.clientX-this.x+"px"
    this.targetobj.style.top=this.offsety+evtobj.clientY-this.y+"px"
    
    //Aggiunta
    var imgpath = this.targetobj.src;
    var fieldname = imgpath.substring(imgpath.lastIndexOf("/")+1, imgpath.length-4);
    document.saveformazione.elements[fieldname+"_x"].value=this.offsetx+evtobj.clientX-this.x;
    document.saveformazione.elements[fieldname+"_y"].value=this.offsety+evtobj.clientY-this.y;
    //la riga seguente è solo di debug, a script finito si può eliminare.
    document.saveformazione.testo.value=fieldname+" X = "+document.saveformazione.elements[fieldname+"_x"].value+" Y = "+document.saveformazione.elements[fieldname+"_y"].value;
    //Fine aggiunta
    
    return false
    }
    }
    }
    
    dragobject.initialize()
    
    </script>
    
    
    </body>
    
    </html>

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    No, non intendevo di spostare lo script (che stava benissimo nel tag head dov'era), intendevo dire che quando ho scaricato il sorgente della pagina, mi sono trovato con uno script anche alla fine del codice html, prima della chiusura del tag body e il form l'avevo aggiunto lì.

    Che cosa ti manca?
    La pagina di elaborazione dei dati, per salvare nel database le posizioni, e poi ci saranno delle modifiche da apportare a questa pagina attuale perché possa leggere le posizioni salvate nel database e possa di conseguenza posizionare le immagini al posto giusto.

    Il form dovrebbe diventare qualcosa del genere
    codice:
    <form action="salvaformazione.php" method="post" nome="saveformazione">
    ...
    ...
    <input type="submit" value="Salva Formazione" />
    </form>
    e nella pagina di destinazione salvaformazione.php andrai a recuperare i valori postati

    codice:
    <?php
      //la posizione di gigimedia sarà in $_POST['gigimedia_x'] e $_POST['gigimedia_y']
      // la posizione di pincopanco sarà in $_POST['pincopanco_x'] e $_POST['pincopanco_y'];
      //... query per salvare in database
    ?>
    il lavoro non è tanto, ma se è la prima volta che metti mano a php e database può farti passare dei brutti quarti d'ora... per cui ti consiglio di leggere con attenzione le guide base a php e mysql
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    come dovrei cambiare lo script per spostare un div invece che un immagine?

    [lato javascript nn php]

  9. #9
    Grazia andrea ho capito. il secondo script che vedi nella pagina in realtà non serve a molto era una prova perchè su un altro forum un utente dava come soluzione l'aggiunta di quel secondo script per salvare la posizione delle immagini.
    Volevo chiederti:
    -Non mettendo lo script con la tua aggiunta tra i tag head ma mettendolo come nella pagina che ti ho postato funziona benissimo, cosa cambia metterlo all'interno dell'head o all'interno del body?
    - La parte di connessione al database la scrittura e il recupero dei dati so già come farla, mi sono letto qualche guida al riguardo.

    Per la domanda dell'altro utente:
    se ti serve draggare tutto ciò che è contenuto in un div basta che assegni la classe drag al div.

    Un'altra cosa. la mia idea era quella appunto di inserire ogni immagine in un div così posso far caricare la posizione del div dal database e quindi l'immagine si troverà al posto giusto.
    Andrea volevo chiederti se invece è possibile settare tra gl attributi dell'immagine la posizione così da evitare di aggiungere i div.
    Grazie di tutto

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    bhè, puoi fare la prova

    [img]....[/img]

    left e top sono le proprietà che vai a salvare in database
    <´¯)(¯`¤._)(¯`»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.