#javascript #jquery #html #jquery-ui
#javascript #jquery #HTML #jquery-ui
Вопрос:
Если у меня есть 2 <divs>
, a и b, которые являются отдельными разделениями, которые расположены в абсолютном положении. Если я перетащу DIV B, он может переместиться куда угодно. Если я перетащу A, то DIV B переместится на то же смещение, что и div A.
Однако, что я пока знаю, так это то, что, несмотря на возможность разместить div B где угодно, я хочу. При перемещении div A div B просто возвращается на место рядом с div A..
$('.a, .b').draggable({
drag: function(event, ui) {
$('.a').css({
top: ui.offset.top 'px',
left: ui.offset.left 100 'px'
});
}
});
Есть ли способ, которым я могу добавить какой-нибудь «mouseoffset», чтобы заставить это работать?
Ответ №1:
Попробуйте это:
$(function(){
$('.a, .b').draggable({
start: function(){
if($(this).hasClass('b')){
var p = $(this).position();
$(this).data('lastLeft',p.left);
$(this).data('lastTop',p.top);
}
},
stop: function(){
if($(this).hasClass('b')){
$(this).removeData('lastLeft');
$(this).removeData('lastTop');
}
},
drag: function(event, ui) {
if($(this).hasClass('b')){
var p = $(this).position();
$(this).data('lastLeft',p.left);
$(this).data('lastTop',p.top);
var dx = ui.position.left - $(this).data('lastLeft');
var dy = ui.position.top - $(this).data('lastTop');
$('.a').each(function(){
var p = $(this).position();
$(this).css({
left: (p.left dx) "px",
top: (p.top dy) "px"
});
});
}
}
});
});
Рабочая демонстрация jsfiddle:http://jsfiddle.net/dkJFh/1
По сути, он сохраняет начальную позицию B при каждом перемещении мыши, чтобы в следующий раз можно было вычислить смещение.
Ответ №2:
Пожалуйста, проверьте это. Я думаю, это может решить вашу проблему:
$('#div1').draggable({
drag: function(event, ui) {
$('#div2').css({
top: ui.offset.top 'px',
left: ui.offset.left 100 'px'
});
}
});
Комментарии:
1. Хорошая попытка, но не совсем. Обратите внимание, что когда вы перемещаете div1 после того, как куда-то переместили div2, div2 возвращается на свое первоначальное место, прикрепленное к div1… истинное решение состояло бы в том, чтобы div2 оставался на том же месте, куда бы он ни перемещался, но при перемещении div1 div2 перемещал бы то же смещение, что и div1. Хотя это только начало.
Ответ №3:
Вы можете достичь желаемого эффекта, подумав о проблеме немного по-другому. Вложение B в A позволит вам сделать это легко (несмотря на обходной путь IE):
HTML:
<div class='a' style="position:relative;">
<p>div A</p>
<div class='b' style="position:absolute;">div B</div>
</div>
JAVASCRIPT:
$('.a, .b').draggable({
});
// IE sucks, so must prevent bubbling on inner div else both divs
// become draggable with strange results
$('.b').mousedown(function(e) {
if($.browser.msie) {
e.stopPropagation();
}
});