Как получить координату после перетаскивания jQuery?
Как получить координату после перетаскивания jQuery? Я хочу сохранить координаты в базе данных, чтобы при следующем посещении элемент находился в этом положении. Например, x: 520px, y: 300px?
РЕДАКТИРОВАТЬ:
Я программист PHP и MySQL:)
Есть ли учебник там?
9 ответов
Я просто сделал что-то подобное (если я вас правильно понимаю).
Я использую функцию position(), включенную в jQuery 1.3.2.
Просто сделал копию вставки и быструю настройку... Но должен дать вам идею.
// 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>
Была такая же проблема. Мое решение следующее:
$("#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;
}
});
Ничто из вышеперечисленного не помогло мне.
Вот мое решение - прекрасно работает:
$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);
(Основано частично на решении, приведенном здесь: /questions/27230854/najti-polozhenie-myishi-otnositelno-elementa/27230868#27230868)
Это сработало для меня:
$("#element1").droppable(
{
drop: function(event, ui)
{
var currentPos = ui.helper.position();
alert("left="+parseInt(currentPos.left)+" top="+parseInt(currentPos.top));
}
});
Если вы слушаете драгстоп или другие события, исходная позиция должна быть параметром пользовательского интерфейса:
dragstop: function(event, ui) {
var originalPosition = ui.originalPosition;
}
В противном случае, я считаю, что единственный способ получить это:
draggable.data("draggable").originalPosition
Куда можно перетащить объект, который вы перетаскиваете. Вторая версия не гарантированно будет работать в будущих версиях jQuery.
$(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>
Я бы начал с чего-то вроде этого. Затем обновите его, чтобы использовать плагин позиции, и он должен получить вас там, где вы хотите быть.
Престижность принята, ответ отличный. Тем не менее, модуль Draggable также имеет событие "перетаскивания", которое сообщает вам позицию во время перетаскивания. Таким образом, в дополнение к 'start' и 'stop' вы можете добавить следующее событие в ваш объект 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);
}
Мне нужно было сохранить начальную позицию и конечную позицию. эта работа для меня:
$('.object').draggable({
stop: function(ev, ui){
var position = ui.position;
var originalPosition = ui.originalPosition;
}
});