Comment obtenir la position des coordonnées après avoir utilisé jQuery drag and drop?

Comment obtenir la position des coordonnées après avoir utilisé jQuery drag and drop? Je veux enregistrer les coordonnées d'une base de données, de sorte que la prochaine fois que je visite, l'article sera dans cette position. Par exemple, x: 520px, y: 300px?

EDIT:

je suis en PHP et mysql programmeur :)

Est-il un tutoriel?

38
demandé sur Cudos 2009-05-11 20:57:29

9 réponses

je viens de faire quelque chose comme ça (Si je vous comprends bien).

j'utilise la position de la fonction () include dans jQuery 1.3.2.

Juste fait un copier coller et un rapide tweak... Mais devrait vous donner l'idée.

// 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>
38
répondu Cudos 2009-05-13 12:43:37

avait le même problème. Ma solution est la suivante:

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

    }
});
15
répondu Webars 2012-03-24 16:22:06

rien de ce qui précède n'a fonctionné pour moi.

Voici ma solution fonctionne très bien:

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

(basé en partie sur la solution donnée ici:https://stackoverflow.com/a/10429969/165673)

8
répondu Yarin 2017-05-23 12:17:30

Cela a fonctionné pour moi:

$("#element1").droppable(
{
    drop: function(event, ui)
    {
        var currentPos = ui.helper.position();
            alert("left="+parseInt(currentPos.left)+" top="+parseInt(currentPos.top));
    }
});
8
répondu Sampath 2016-07-18 09:33:05

si vous écoutez le dragstop ou d'autres événements, la position originale doit être un paramètre ui:

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

sinon, je crois que la seule façon de l'obtenir est:

draggable.data("draggable").originalPosition

où draggable est l'objet que vous traînez. La seconde version n'est pas garantie de fonctionner dans les versions futures de jQuery.

2
répondu soney 2011-03-07 16:48:09

je commencerais par quelque chose comme . Puis mettez à jour cela pour utiliser le plugin et qui devrait vous rendre où vous voulez être.

2
répondu TeckniX 2012-11-08 13:20:09

$(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>
2
répondu Syahir Halim 2015-04-16 06:19:21

Cudos accepté réponse est grande. Cependant, le module Draggable a aussi un événement "drag" qui vous indique la position pendant votre Drag. Donc, en plus de la "start" et "stop" vous pouvez ajouter l'événement suivant dans votre Déplaçable objet:

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

    }
1
répondu moluv00 2011-10-11 18:50:10

j'avais besoin de sauvegarder la position de départ et la position de fin. ce travail m':

    $('.object').draggable({
        stop: function(ev, ui){
            var position = ui.position;
            var originalPosition = ui.originalPosition;
        }
    });
1
répondu Diego Mariano 2013-03-14 12:23:58