拖动父级时Javascript移动子项

时间:2016-04-14 09:58:18

标签: javascript

我想在拖动父元素和元素本身时移动子元素,并且不应移动父元素。
这是我的demo
在演示中,我想在拖动它时移动红色框或拖动它的父(背景),但我无法计算正确的位置,你能帮我吗?
其他问题是,当我设置off时我无法mousemove event .off('mousemove', mousemove') 非常感谢你

1 个答案:

答案 0 :(得分:1)

我做了一些改变。这有效;)

DEMO

$(function(){
  var graph = $('.graph')[0];
  var parent = $(graph).parent();

  var lockX = 0;
  var lockY = 0;

  var mousemove = function(e){
        $(graph).offset({
            top: e.pageY + lockY,
            left: e.pageX + lockX
        });
    };

  parent.on('mousedown', function(e) {
        lockY = $(graph).offset().top - e.pageY;
        lockX = $(graph).offset().left - e.pageX;

        $(this).addClass('draggable')
          .on('mousemove', mousemove)
          .on('mouseup', function(){
            $(this).off('mousemove', mousemove)
        })

        event.preventDefault()
    });

    $('.graph').parent().on('mouseup', function(e) {
        $('.draggable')
            .off('mousemove', mousemove)
            .removeClass('draggable');
    });
});

修改

我做的唯一实际改变是:

.offset({
    // instead of: e.pageY - $('.draggable').outerHeight() / 2 + dtop
    top: e.pageY + dtop,

    // instead of: e.pageX - $('.draggable').outerWidth() / 2 + dleft
    left: e.pageX + dleft
})

PS:在JS Fiddle的示例中,我将dleftdtop分别更改为lockXlockY。当然,这是一个纯粹的语义事物。