【问题标题】:How do I get the coordinate position after using jQuery drag and drop?使用jQuery拖放后如何获取坐标位置?
【发布时间】:2010-10-25 08:14:21
【问题描述】:

使用jQuery拖放后如何获取坐标位置?我想将坐标保存到数据库中,以便下次访问时,该项目将位于该位置。比如x:520px,y:300px?

编辑:

我是 PHP 和 mysql 程序员 :)

有教程吗?

【问题讨论】:

    标签: jquery drag-and-drop save position


    【解决方案1】:

    我刚刚做了类似的东西(如果我理解正确的话)。

    我在 jQuery 1.3.2 中使用了函数 position()。

    只是做了一个复制粘贴和一个快速调整......但应该会给你这个想法。

    // Make images draggable.
    $(".item").draggable({
    
        // Find original position of dragged image.
        start: function(event, ui) {
    
            // Show start dragged position of image.
            var Startpos = $(this).position();
            $("div#start").text("START: \nLeft: "+ Startpos.left + "\nTop: " + Startpos.top);
        },
    
        // Find position where image is dropped.
        stop: function(event, ui) {
    
            // Show dropped position.
            var Stoppos = $(this).position();
            $("div#stop").text("STOP: \nLeft: "+ Stoppos.left + "\nTop: " + Stoppos.top);
        }
    });
    
    <div id="container">
        <img id="productid_1" src="images/pic1.jpg" class="item" alt="" title="" />
        <img id="productid_2" src="images/pic2.jpg" class="item" alt="" title="" />
        <img id="productid_3" src="images/pic3.jpg" class="item" alt="" title="" />
    </div>
    
    <div id="start">Waiting for dragging the image get started...</div>
    <div id="stop">Waiting image getting dropped...</div>
    

    【讨论】:

    • 刚刚使用它来帮助通过可放置应用程序进行增强,非常感谢!
    • 这真的适合任何人吗?我没有运气。请参阅my answer 了解有效的解决方案。
    【解决方案2】:

    遇到了同样的问题。接下来是我的解决方案:

    $("#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;
    
        }
    });
    

    【讨论】:

    • 我无法理解这一点。你能解释一下什么是“ui”和什么是“this”吗? attn:这个解决方案对我有用。
    • 来自 jQuery UI 文档:“所有回调都接收两个参数:原始浏览器事件和准备好的 ui 对象:1) ui.draggable - 当前可拖动元素,一个 jQuery 对象;2) ui.helper -当前可拖动助手,一个 jQuery 对象;3) ui.position - 可拖动助手的当前位置 { top: , left: } ; 4) ui.offset - 可拖动助手的当前绝对位置 { top: , left: } .
    • 谢谢伙计,在找到您的解决方案之前,我一直在苦苦挣扎。这对我很有帮助。
    • 这是我一直在寻找的理想解决方案。简单明了。
    【解决方案3】:

    以上都不适合我。

    这是我的解决方案 - 效果很好:

    $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);
    

    (基于此处给出的部分解决方案:https://stackoverflow.com/a/10429969/165673

    【讨论】:

    • 像魅力一样工作。谢谢
    • 你能告诉我们,我们需要使用哪个单位
    【解决方案4】:

    这对我有用:

    $("#element1").droppable(
    {
        drop: function(event, ui)
        {
            var currentPos = ui.helper.position();
                alert("left="+parseInt(currentPos.left)+" top="+parseInt(currentPos.top));
        }
    });
    

    【讨论】:

      【解决方案5】:

      如果是监听dragstop或其他事件,原位置应该是一个ui参数:

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

      否则,我认为获得它的唯一方法是:

      draggable.data("draggable").originalPosition
      

      draggable 是您正在拖动的对象。不保证第二个版本可以在 jQuery 的未来版本中使用。

      【讨论】:

        【解决方案6】:

        我会从this 之类的东西开始。 然后更新它以使用position plugin 这应该会让你到达你想去的地方。

        【讨论】:

          【解决方案7】:

          $(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>

          【讨论】:

          • 这很棒,是像素吗?
          【解决方案8】:

          Cudos 接受的答案很棒。然而,Draggable 模块也有一个“拖动”事件,它告诉你拖动时的位置。因此,除了“开始”和“停止”之外,您还可以在 Draggable 对象中添加以下事件:

              // Drag current position of dragged image.
              drag: function(event, ui) {
          
                  // Show the current dragged position of image
                  var currentPos = $(this).position();
                  $("div#xpos").text("CURRENT: \nLeft: " + currentPos.left + "\nTop: " + currentPos.top);
          
              }
          

          【讨论】:

            【解决方案9】:

            我需要保存开始位置和结束位置。 这项工作对我来说:

                $('.object').draggable({
                    stop: function(ev, ui){
                        var position = ui.position;
                        var originalPosition = ui.originalPosition;
                    }
                });
            

            【讨论】:

              猜你喜欢
              • 2013-05-12
              • 2018-10-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多