代码之家  ›  专栏  ›  技术社区  ›  Tirkesh Turkesh

如何在可拖放div中释放项目的精确位置元素上拖放

  •  1
  • Tirkesh Turkesh  · 技术社区  · 7 年前

    我正在开发拖放功能,它工作得很好,但当我拖放元素时,它不是在我发布它的位置发布的,我知道我缺少了一些东西,我在这里添加了我的所有代码,有人能帮我吗,我在这里添加了我的所有代码,只是有点帮助,谢谢

    <script>
    
                $(".draggable_image").draggable({
                    helper: 'clone',
                });
    $(".droppable").droppable({
                    accept: ".draggable_image",
                    drag: function(){
                        var offset = $(this).offset();
                        var xPos = offset.left;
                        var yPos = offset.top;
                    },
                    drop: function (event, ui) {
                        if (!ui.draggable.hasClass("dropped")) {
                            var uniqueId = new Date().getTime();
                            $(".center-div").append($(ui.draggable).clone().addClass("dropped").attr('id',uniqueId).draggable());
                            $(".dropped img").resizable({ghost: true});
                            ui.draggable.draggable('enable');
                        }
                    }
                });
    </script>
      
    
    <style>
    .center-div {
        width: 80%;
        height: 80%;		
        background: grey;
        position: absolute;
        top:240px;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
    }
    
    .line{
        height: 47px;
        border-bottom: 1px solid black;
        position: absolute;
    }
    .line-complete:hover {
        //border: 1px solid white !important;
        //background: white !important;
        //padding: 0px;
        //font-size: 1.2em;
        cursor: pointer;
    }
    .line-circle {
        width: 15px;
        height: 15px;
        border-radius: 50%;
        font-size: 50px;
        color: #fff;
        line-height: 5px;
        text-align: center;
        background: grey; //red
        margin-left: -3px !important;
        margin-top: -5px !important;
        z-index: 9999;
    }
    
    
    .draggable { padding: 0.5em; float: left; margin: 10px 10px 10px; }
    .draggeble_exist { padding: 0.5em; float: left; margin: 10px 10px 10px; }
    
    
    .button {
        font-size: 6px !important;
    }
    
     
    
    </style>
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    	<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    	<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    	<link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css'>
    <div class="container">
    <div class="row">
    		<div class="col-md-12">
      <div id="floorplan_images">
      <img class="draggable_image" src="http://hfpbuilder-dev.serverdatahost.com/images/vessel_drum.png" width="50" height="50">
      </div>
    </div>
    </div>
    </div>  
    <div class="center-div ui-widget-header droppable">
    	    
    	</div>
    1 回复  |  直到 7 年前
        1
  •  3
  •   Twisty    7 年前

    您将要使用 .position() 将其附加到 <div>

    例如:

    $(function() {
      $(".draggable_image").draggable({
        helper: 'clone',
        zIndex: 1000
      });
      $(".droppable").droppable({
        accept: ".draggable_image",
        drag: function() {
          var offset = $(this).offset();
          var xPos = offset.left;
          var yPos = offset.top;
        },
        drop: function(event, ui) {
          var item = ui.draggable;
          if (!item.hasClass("dropped")) {
            var uniqueId = new Date().getTime();
            var newItem = item.clone();
            newItem.addClass("dropped");
            newItem.attr("id", uniqueId);
            newItem.appendTo($(this))
              .draggable({
                handle: $(this).not(".ui-resizable-handle"),
                containment: $(".droppable")
              });
            newItem.position({ of: event
            });
            newItem.resizable({
              ghost: true
            });
          } else {
            return true;
          }
        }
      });
    });
    .center-div {
      width: 80%;
      height: 80%;
      background: grey;
      position: absolute;
      top: 240px;
      bottom: 0;
      left: 0;
      right: 0;
      margin: auto;
    }
    
    .line {
      height: 47px;
      border-bottom: 1px solid black;
      position: absolute;
    }
    
    .line-complete:hover {
      //border: 1px solid white !important;
      //background: white !important;
      //padding: 0px;
      //font-size: 1.2em;
      cursor: pointer;
    }
    
    .line-circle {
      width: 15px;
      height: 15px;
      border-radius: 50%;
      font-size: 50px;
      color: #fff;
      line-height: 5px;
      text-align: center;
      background: grey; //red
      margin-left: -3px !important;
      margin-top: -5px !important;
      z-index: 9999;
    }
    
    .draggable {
      padding: 0.5em;
      float: left;
      margin: 10px 10px 10px;
    }
    
    .draggeble_exist {
      padding: 0.5em;
      float: left;
      margin: 10px 10px 10px;
    }
    
    .button {
      font-size: 6px !important;
    }
    <link rel='stylesheet prefetch' href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css'>
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    
    <div class="container">
      <div class="row">
        <div class="col-md-12">
          <div id="floorplan_images">
            <img class="draggable_image" src="http://hfpbuilder-dev.serverdatahost.com/images/vessel_drum.png" width="50" height="50">
          </div>
        </div>
      </div>
    </div>
    <div class="center-div ui-widget-header droppable">
    </div>

    希望有帮助!