Drag div con class

Erzsébeth

Nuovo Utente
25 Lug 2012
14
0
1
35
Torino
Salve a tutti,
sono una nabba in js ed è tutto il giorno che cerco di capire come modificare uno script.

Devo far si che 3 div posizionati in verticale si possano spostare separatamente.
Al momento ho il codice funzionante con un solo div con id collegato al js.
Per convertire l'azione a 3 div con class e non id, come si deve fare?

Spero si sia compreso il mio cruccio, non so davvero dove mettere le mani.
Nel caso sia un errore banale o una cosa incomprensibile, non mandatemi a rogo, sono solo una ragazza che non sa dire di no al proprio capo :oops:

Vi metto il codice qui sotto:

Codice:
<body>
    <div id="drag">Spostami!</div>
</body>
<script>
var Draggable = function (id) {
  var el = document.getElementById(id),
    isDragReady = false,
    dragoffset = {
      x: 0,
      y: 0
    };
  this.init = function () {
    this.initPosition();
    this.events();
  };
  this.initPosition = function () {
    el.style.position = "absolute";
    el.style.top = "20px";
    el.style.left = "48%";
  };
  this.events = function () {
    var self = this;
    _on(el, 'mousedown', function (e) {
      isDragReady = true;
      //corssbrowser mouse pointer values
      e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
        document.documentElement.scrollLeft :
        document.body.scrollLeft);
      e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
        document.documentElement.scrollTop :
        document.body.scrollTop);
      dragoffset.x = e.pageX - el.offsetLeft;
      dragoffset.y = e.pageY - el.offsetTop;
    });
    _on(document, 'mouseup', function () {
      isDragReady = false;
    });
    _on(document, 'mousemove', function (e) {
      if (isDragReady) {
        e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
          document.documentElement.scrollLeft :
          document.body.scrollLeft);
        e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
          document.documentElement.scrollTop :
          document.body.scrollTop);
        el.style.top = (e.pageY - dragoffset.y) + "px";
        el.style.left = (e.pageX - dragoffset.x) + "px";
      }
    });
  };
  //cross browser event Helper function
  var _on = function (el, event, fn) {
    document.attachEvent ? el.attachEvent('on' + event, fn) : el.addEventListener(event, fn, !0);
  };
  this.init();
}
</script>
<script type="text/javascript">
    new Draggable('drag');
</script>
 
Ciao, fai prima a dare id diversi ai div e poi istanzi piu classi
Codice:
new Draggable('drag');
new Draggable('drag2');
new Draggable('drag3');
altrimenti devi usare il metodo getElementByClassName("class"), e modificare le funzioni aggiungendo dei cicli.
 
Ciao, fai prima a dare id diversi ai div e poi istanzi piu classi
Codice:
new Draggable('drag');
new Draggable('drag2');
new Draggable('drag3');
altrimenti devi usare il metodo getElementByClassName("class"), e modificare le funzioni aggiungendo dei cicli.

Ho provato a creare diversi id e semi-funziona, nel senso che si spostano come voglio se non che*scappano* quando clicco, ovvero sembrano traslare verticalmente :/
 
a me non "scappano", però vengono sovrapposti, per dargli posizioni diverse puoi creare un array
Codice:
var pos = new Array();
  pos["drag"] = "20px";
  pos["drag2"] = "60px";
  pos["drag3"] = "100px";
e quando setti la posizione la prendi dall'array
Codice:
el.style.top = pos[id];
posta il link se lo hai online
 
a me non "scappano", però vengono sovrapposti, per dargli posizioni diverse puoi creare un array
Codice:
var pos = new Array();
  pos["drag"] = "20px";
  pos["drag2"] = "60px";
  pos["drag3"] = "100px";
e quando setti la posizione la prendi dall'array
Codice:
el.style.top = pos[id];
posta il link se lo hai online

Niente link, sto "giocando" con i codici per creare un applicativo dimostrativo in locale.
E sinceramente non ho idea di cosa tu mi abbia consigliato di fare :/

I miei div hanno un margine dato da un altro fattore e quindi non si spostano.
Ma quando vado per spostarli, il 1st funziona alla grande, il 2nd e il 3rd vengono traslati verso il basso del 50% della verticale e non capisco il motivo.
Come faccio a mostrare qui l'intero codice attuale?
 
Carica uno zip, il forum è stato aggiornato proprio oggi ma penso che ti basta cliccare su Carica Documenti
Io l'ho provato con il codice che mi hai postato e funziona
HTML:
<body>
  <div id="drag">Spostami!</div>
  <div id="drag2">Spostami2!</div>
  <div id="drag3">Spostami2!</div>
</body>
<script>
  var Draggable = function (id) {
  var pos = new Array();
  pos["drag"] = "20px";
  pos["drag2"] = "60px";
  pos["drag3"] = "100px";
  var el = document.getElementById(id),
  isDragReady = false,
  dragoffset = {
  x: 0,
  y: 0
  };
  this.init = function () {
  this.initPosition();
  this.events();
  };
  this.initPosition = function () {
  el.style.position = "absolute";
  el.style.top = pos[id];
  el.style.left = "48%";
  };
  this.events = function () {
  var self = this;
  _on(el, 'mousedown', function (e) {
  isDragReady = true;
  //corssbrowser mouse pointer values
  e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
  document.documentElement.scrollLeft :
  document.body.scrollLeft);
  e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
  document.documentElement.scrollTop :
  document.body.scrollTop);
  dragoffset.x = e.pageX - el.offsetLeft;
  dragoffset.y = e.pageY - el.offsetTop;
  });
  _on(document, 'mouseup', function () {
  isDragReady = false;
  });
  _on(document, 'mousemove', function (e) {
  if (isDragReady) {
  e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
  document.documentElement.scrollLeft :
  document.body.scrollLeft);
  e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
  document.documentElement.scrollTop :
  document.body.scrollTop);
  el.style.top = (e.pageY - dragoffset.y) + "px";
  el.style.left = (e.pageX - dragoffset.x) + "px";
  }
  });
  };
  //cross browser event Helper function
  var _on = function (el, event, fn) {
  document.attachEvent ? el.attachEvent('on' + event, fn) : el.addEventListener(event, fn, !0);
  };
  this.init();
  }
</script>
<script type="text/javascript">
  new Draggable('drag');
  new Draggable('drag2');
  new Draggable('drag3');
</script>
 
Carica uno zip,...
Probabilmente ci sono dei conflitti con altri comandi.
Non mi fa caricare lo zip, scrivo il codice direttamente:

Codice:
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>element70px</title>
    <link rel="stylesheet" type="text/css" href="draggable.css">
    <script type="text/javascript">
function mouseDown() {
    document.getElementById("alert").style.display = "initial";
}

function mouseUp() {
    document.getElementById("alert").style.display = "none";
}


</script>
</head>
<body>

<div id="box">
    <div id="sidebar">
        <div id="drag1" class="button">Spostami!</div>
        <div id="drag2" class="button">Spostami!</div>
        <div id="drag3" class="button">Spostami!</div>
    </div>
    <div id="container">
        <div id="raw1">
        <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
        <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
    </div>
    <div id="raw2">
        <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()" style="opacity:0"></div>
        <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
    </div>
    <div id="raw3">
        <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
        <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
    </div>
    </div>
    <div id="alert">Hai premuto il pulsante!</div>
</div>
</body>
<script>
var Draggable = function (id) {
  var el = document.getElementById(id),
    isDragReady = false,
    dragoffset = {
      x: 0,
      y: 0
    };
  this.init = function () {
    this.initPosition();
    this.events();
  };

  this.initPosition = function () {
    el.style.position = "relative";
    el.style.top = "0px";
    el.style.left = "0px";
  };
  //events for the element
  this.events = function () {
    var self = this;
    _on(el, 'mousedown', function (e) {
      isDragReady = true;
      //corssbrowser mouse pointer values
      e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
        document.documentElement.scrollLeft :
        document.body.scrollLeft);
      e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
        document.documentElement.scrollTop :
        document.body.scrollTop);
      dragoffset.x = e.pageX - el.offsetLeft;
      dragoffset.y = e.pageY - el.offsetTop;
    });
    _on(document, 'mouseup', function () {
      isDragReady = false;
    });
    _on(document, 'mousemove', function (e) {
      if (isDragReady) {
        e.pageX = e.pageX || e.clientX + (document.documentElement.scrollLeft ?
          document.documentElement.scrollLeft :
          document.body.scrollLeft);
        e.pageY = e.pageY || e.clientY + (document.documentElement.scrollTop ?
          document.documentElement.scrollTop :
          document.body.scrollTop);
        el.style.top = (e.pageY - dragoffset.y) + "px";
        el.style.left = (e.pageX - dragoffset.x) + "px";
      }
    });
  };
  //cross browser event Helper function
  var _on = function (el, event, fn) {
    document.attachEvent ? el.attachEvent('on' + event, fn) : el.addEventListener(event, fn, !0);
  };
  this.init();
}</script>
<script type="text/javascript">
    new Draggable('drag1');
    new Draggable('drag2');
    new Draggable('drag3');
</script>
</html>

E qui il css:

Codice:
*{
    border: 0;
    margin: 0;
    padding: 0;
}
html,body{
    color:#FFF;
    text-align:center;
    font-size:10px;
    font-weight:bold;
    font-family:Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif;
}

#box {
    width:1024px;
    height:768px;   
    margin:0;
    overflow: hidden;
    float:left;
}

#sidebar {
    position:relative;
    width:70px;
    height:768px;
    z-index:100;
   
   
}
#drag1, #drag2, #drag3{
    position: relative;   
    border-radius:10px;
    background-color: rgba(255,0,0,0.5);
    width:70px;
    height:70px;
    margin-bottom:279px;
    float:left;   
    line-height: 70px;
    cursor:move;
    overflow: hidden;
}

#container {
    position:absolute;
    top:0;
    left:477px;
   
}

#raw1 {   
    position: relative;
    height:70px;
    margin-top:0;
}

#raw2 {   
    position: relative;
    height:70px;
    margin-top:279px;
}

#raw3 {   
    position: relative;
    height:70px;
    margin-top:279px;
}

.button {   
    position: relative;   
    border-radius:10px;
    background-color: rgba(255,0,0,0.5);
    width:70px;
    height:70px;
    float:left;   
    line-height: 70px;
    cursor:pointer;
    overflow: hidden;
}
.margin {   
    margin-right:407px;
}

.button:active {
    background-color: rgba(255,0,0,1);
    box-shadow: inset #000000 0 0 10px;
}



#alert {
    position:absolute;
    background-color: rgba(255,0,0,1);
    box-shadow: inset #000000 0 0 10px;
    border-radius: 5px;
    border:none;
    width:240px;
    height:30px;
    left:512px;
    top:384px;
    margin-top:-15px;
    margin-left:-120px;
    display:none;
    text-transform: uppercase;
    font-size: 10px;
    line-height:30px;
    z-index:200;
}
 
non sono arrivato a controllare il tuo codice, potresti intanto provare ad utilizzare jquery, diventa tutto più semplice
HTML:
<!doctype html>
<html lang="en">
  <head>
  <meta charset="UTF-8">
  <title>element70px</title>
  <link rel="stylesheet" type="text/css" href="draggable.css">
  <script type="text/javascript">
  function mouseDown() {
  document.getElementById("alert").style.display = "initial";
  }

  function mouseUp() {
  document.getElementById("alert").style.display = "none";
  }
  </script>
  </head>
  <body>

  <div id="box">
  <div id="sidebar">
  <div class="drag" id="drag1" class="button">Spostami!</div>
  <div class="drag" id="drag2" class="button">Spostami!</div>
  <div class="drag" id="drag3" class="button">Spostami!</div>
  </div>
  <div id="container">
  <div id="raw1">
  <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
  <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
  </div>
  <div id="raw2">
  <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()" style="opacity:0"></div>
  <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
  </div>
  <div id="raw3">
  <div class="button margin" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
  <div class="button" onmousedown="mouseDown()" onmouseup="mouseUp()">Push</div>
  </div>
  </div>
  <div id="alert">Hai premuto il pulsante!</div>
  </div>
  </body>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script  src="https://code.jquery.com/ui/1.12.0-rc.2/jquery-ui.js"></script>
  <script type="text/javascript">
  $(document).ready(function () {
  $('.drag').draggable();
  });
  </script>
</html>
 
  • Like
Reactions: Erzsébeth
Non ci sono errori nel tuo codice, bisogna solo implementare la funzione su tutti i div che ti servono ma se non ti vietano di usare jquery la soluzione è più semplice.
Nell'esempio che ti ho postato richiamo le librerie direttemente sul sito di jquery, io preferisco e consiglio anche a te di scaricartele in una tua cartella e richiamarle da li.
 

Discussioni simili