问题
im trying to collect the positions of multiple draggable elements using jQuery UI.
At the moment I can get the position of one element, but when I move around another, both positions change.
Please can someone assist me in getting the separate positions of multiple draggable items.
http://codepen.io/anon/pen/nLGIl
HTML
<div class="dragThis" id="box-1"style="top: 100px; left: 50px;" >
<h2>Test 1</h2>
<p>This is a test</p>
<ul>
<li class="posX"></li>
<li class="posY"></li>
</ul>
</div>
<div class="dragThis" id="box-1" style="top: 50px; left: 100px;" >
<h2>Test 2</h2>
<p>This is a test</p>
<ul>
<li class="posX"></li>
<li class="posY"></li>
</ul>
</div>
CSS
.dragThis {
min-width: 50px;
max-width: 300px;
min-height: 50px;
max-height: 400px;
overflow: auto;
padding: 10px;
background: #efefef;
border: 3px solid #ccc;
border-radius: 10px;
display: inline-block;
position: absolute;
top: 0px;
left: 0px;
z-index: 0;
}
.dragThis h2 {
font-size: 20px;
margin: 0;
padding: 0;
}
.dragThis ul {
list-style: none;
margin: 0;
padding: 0;
}
.top {z-index: 2; position: relative}
.bottom {z-index: 1; position: relative}
JS
$(document).ready(function() {
var a = 3;
$('.dragThis').draggable(
{
start: function(){
$(this).css("z-index", a++);
},
drag: function(){
var offset = $(this).offset();
var xPos = offset.left;
var yPos = offset.top;
$('.posX').text('x: ' + xPos);
$('.posY').text('y: ' + yPos);
}
});
$('.dragThis').click(function(){
$(this).addClass('top').removeClass('bottom');
$(this).siblings().removeClass('top').addClass('bottom');
$(this).css("z-index", a++);
});
});
回答1:
First of all, Double ID's are not good.. box-1 and box-2 are better:
You are matching all elements with class '.posX' etc. Try this:
$(document).ready(function() {
var a = 3;
$('.dragThis').draggable(
{
start: function(){
$(this).css("z-index", a++);
},
drag: function(){
var offset = $(this).offset();
var xPos = offset.left;
var yPos = offset.top;
$(this).find('.posX').text('x: ' + xPos);
$(this).find('.posY').text('y: ' + yPos);
}
});
$('.dragThis').click(function(){
$(this).addClass('top').removeClass('bottom');
$(this).siblings().removeClass('top').addClass('bottom');
$(this).css("z-index", a++);
});
});
回答2:
$('.posX', this).text('x: ' + xPos);
$('.posY', this).text('y: ' + yPos);
instead of
$('.posX').text('x: ' + xPos);
$('.posY').text('y: ' + yPos);
Sample - http://codepen.io/anon/pen/yKvcB
回答3:
By doing this $('.posX')
you've selected ALL elements with this class when you need only those on the active box, so the code would be like this :
$(this).find('.posX').text('x: ' + xPos);
$(this).find('.posY').text('y: ' + yPos);
DEMO : http://codepen.io/anon/pen/FpCtu
来源:https://stackoverflow.com/questions/17293821/x-and-y-positions-of-multiple-jquery-ui-elements