Drag & Drop + Clone

by KapulaGabor

HTML

<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<div class="col-1" style="height:140px;">
  <div class="mozgat f-szurke f75x30">
    <p>F 75x30</p>
  </div>
  <div class="mozgat f-szurke f75x45" style="top: 65px">
    <p>F 75x45</p>
  </div>
</div>
<p class="clr">&nbsp;</p>
<div id="osszerakas">
  <div id="snaptarget1" class="bal-oszlop tapad bal"></div>
  <div id="snaptarget2" class="kozepso-oszlop tapad bal"></div>
  <div id="snaptarget3" class="jobb-oszlop tapad jobb"></div>
</div>

CSS

* {
  padding: 0;
  margin: 0;
}
.clr {
  clear: both;
}
body {
  background-color: #4A5157;
  font-family: sans-serif;
}
.col-1, .col-2, .col-3 {
  position: relative;
  float: left;
  margin-right: 7px;
}
.mozgat {
  cursor: move;
  margin-bottom: 7px;
  position: absolute;
  z-index: 1;
  border: 1px solid #333;
}
.f75x30 {
  width: 150px;
  height: 60px;
  line-height: 60px;
  border-radius: 2px;
}
.f75x45 {
  width: 150px;
  height: 90px;
  line-height: 90px;
  border-radius: 2px;
}
.f75x30 p, .f75x45 p {
  font-family: sans-serif;
  font-size: 18px;
  color: Gainsboro;
  text-align: center;
  text-shadow: 0px 1px 1px rgba(0, 0, 0, .4);
}
.jobb {
  float: right;
}
.bal {
  float: left;
}
.f-szurke {
  background-color: #999999;
}
#osszerakas {
  margin: 0 auto;
  width: 788px;
  height: 500px;
}
.item {
  cursor: move;
  border: 1px solid #333;
  border-collapse: collapse;
}
#snaptarget1, #snaptarget2, #snaptarget3 {
  position: relative;
  border: 1px solid #4A5157;
  border-collapse: collapse;
}
#snaptarget1 {
  width: 210px;
  height: 369px;
}
#snaptarget2 {
  width: 362px;
  height: 276px;
}
#snaptarget3 {
  width: 210px;
  height: 369px;
}
.snaptarget-hover {
  background-color: #616A72;
}

JavaScript

$(".mozgat").draggable({
  helper: "clone",
  appendTo: "body",
  revert: "invalid",
  snap: ".tapad",
  stack: ".mozgat",
  scroll: false
});
$("#snaptarget1,#snaptarget2,#snaptarget3").droppable({
  accept: ".mozgat",
  activeClass: "snaptarget-hover",
  drop: function (event, ui) {
    var ct = $(this);
    var item = $(ui.draggable);
    var origPos;
    var ctPos = ct.offset();

    if (item.is('.tapad')) {
      origPos = item.offset();
      ct.append(item);
    } else {
      origPos = ui.offset;
      item = item.clone();
      ct.append(item);
      item.removeClass("ui-draggable");
      item.addClass('tapad');
      item.draggable({
        containment: "#osszerakas",
        snap: ".tapad",
        stack: ".mozgat",
        scroll: false
      });
    }
    item.css({
      top: origPos.top - ctPos.top - 1,
      left: origPos.left - ctPos.left - 1
    });
  }
});