Javascript 如何以与jquery UI拖动的第一个div相同的速率移动第二个div?

Javascript 如何以与jquery UI拖动的第一个div相同的速率移动第二个div?,javascript,jquery,html,jquery-ui,Javascript,Jquery,Html,Jquery Ui,如果我有2个,a和b是绝对定位的独立div。如果我拖动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

如果我有2个
,a和b是绝对定位的独立div。如果我拖动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'
        });
    }
});

有什么方法可以添加某种“鼠标偏移”来实现此功能吗?

请检查此项。这可能会解决你的问题,我认为:

$('#div1').draggable({
        drag: function(event, ui) {
        $('#div2').css({
            top: ui.offset.top + 'px',
            left: ui.offset.left + 100 + 'px'
        });
    }
});

你可以通过稍微不同地思考这个问题来达到预期的效果。将B嵌套在A中可以让您轻松完成此操作(尽管有IE解决方案):

HTML:

<div class='a' style="position:relative;">
  <p>div A</p>
  <div class='b' style="position:absolute;">div B</div>
</div>
$('.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();
    }
});
试试这个:

$(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"
                    });
                });
            }
        }
    });
});
正在使用的JSIDLE演示:


它基本上会在每次鼠标移动时保存B的起始位置,以便下次可以计算偏移量。

很好的尝试,但不是很好。请注意,当您在将div2移动到某个位置后移动div1时,div2会捕捉回其附加到div1的原始位置。。。真正的解决方案是让div2停留在它移动的位置,但当移动div1时,div2移动的偏移量与div1移动的偏移量相同。不过这是一个开始。