How do I get the coordinate position after using jQuery drag and drop?

前端 未结 9 1240
北荒
北荒 2020-11-29 20:36

How do I get the coordinate position after using jQuery drag and drop? I want to save the coordinate to a database, so that next time I visit, the item will be in that posi

相关标签:
9条回答
  • 2020-11-29 20:54

    This worked for me:

    $("#element1").droppable(
    {
        drop: function(event, ui)
        {
            var currentPos = ui.helper.position();
                alert("left="+parseInt(currentPos.left)+" top="+parseInt(currentPos.top));
        }
    });
    
    0 讨论(0)
  • 2020-11-29 20:54

    $(function() 
      {
        $( "#element" ).draggable({ snap: ".ui-widget-header",grid: [ 1, 1 ]});
      });
        $(document).ready(function() {
            $("#element").draggable({ 
                    containment: '#snaptarget', 
                    scroll: false
             }).mousemove(function(){
                    var coord = $(this).position();
                    var width = $(this).width();
                   var height = $(this).height();
                    $("p.position").text( "(" + coord.left + "," + coord.top + ")" );
                    $("p.size").text( "(" + width + "," + height + ")" );
             }).mouseup(function(){
                    var coord = $(this).position();
                    var width = $(this).width();
                    var height = $(this).height();
                    $.post('/test/layout_view.php', {x: coord.left, y: coord.top, w: width, h: height});
                   
                    });
            });
    #element {background:#666;border:1px #000 solid;cursor:move;height:110px;width:110px;padding:10px 10px 10px 10px;}
    #snaptarget { height:610px; width:1000px;}
    .draggable { width: 90px; height: 80px; float: left; margin: 0 0 0 0; font-size: .9em; }
    .wrapper
    { 
    background-image:linear-gradient(0deg, transparent 24%, rgba(255, 255, 255, .05) 25%, rgba(255, 255, 255, .05) 26%, transparent 27%, transparent 74%, rgba(255, 255, 255, .05) 75%, rgba(255, 255, 255, .05) 76%, transparent 77%, transparent), linear-gradient(90deg, transparent 24%, rgba(255, 255, 255, .05) 25%, rgba(255, 255, 255, .05) 26%, transparent 27%, transparent 74%, rgba(255, 255, 255, .05) 75%, rgba(255, 255, 255, .05) 76%, transparent 77%, transparent);
    height:100%;
    background-size:45px 45px;
    border: 1px solid black;
    background-color: #434343;
    margin: 20px 0px 0px 20px;
    }
    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>Layout</title>
        <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
        <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
        <link rel="stylesheet" href="../themes/default/css/test4.css" type="text/css" charset="utf-8"/>
        <script src="../themes/default/js/layout.js"></script>
      </head>
    <body>
        <div id="snaptarget" class="wrapper">
            <div id="element" class="draggable ui-widget-content">
              <p class="position"></p>
              <p class="size"></p>
            </div>
        </div> 
        <div></div>
    </body>
    </html>

    0 讨论(0)
  • 2020-11-29 20:55

    If you are listening to the dragstop or other events, the original position should be a ui parameter:

    dragstop: function(event, ui) {
        var originalPosition = ui.originalPosition;
    }
    

    Otherwise, I believe the only way to get it is:

    draggable.data("draggable").originalPosition
    

    Where draggable is the object you are dragging. The second version is not guaranteed to work in future versions of jQuery.

    0 讨论(0)
  • 2020-11-29 20:56

    I was need to save the start position and the end position. this work to me:

        $('.object').draggable({
            stop: function(ev, ui){
                var position = ui.position;
                var originalPosition = ui.originalPosition;
            }
        });
    
    0 讨论(0)
  • 2020-11-29 20:57

    Had the same problem. My solution is next:

    $("#element").droppable({
        drop: function( event, ui ) {
    
            // position of the draggable minus position of the droppable
            // relative to the document
            var $newPosX = ui.offset.left - $(this).offset().left;
            var $newPosY = ui.offset.top - $(this).offset().top;
    
        }
    });
    
    0 讨论(0)
  • 2020-11-29 20:58

    None of the above worked for me.

    Here's my solution- works great:

    $dropTarget.droppable({
        drop: function( event, ui ) {
    
        // Get mouse position relative to drop target: 
        var dropPositionX = event.pageX - $(this).offset().left;
        var dropPositionY = event.pageY - $(this).offset().top;
        // Get mouse offset relative to dragged item:
        var dragItemOffsetX = event.offsetX;
        var dragItemOffsetY = event.offsetY;
        // Get position of dragged item relative to drop target:
        var dragItemPositionX = dropPositionX-dragItemOffsetX;
        var dragItemPositionY = dropPositionY-dragItemOffsetY;
    
        alert('DROPPED IT AT ' + dragItemPositionX + ', ' + dragItemPositionY);
    

    (Based partly off solution given here: https://stackoverflow.com/a/10429969/165673)

    0 讨论(0)
提交回复
热议问题