拖动父级时Javascript移动子级

标签 javascript

我想在拖动父元素和元素本身时移动子元素,并且父元素不应该被移动。
这是我的demo
正如在演示中一样,我想在拖动红色框或拖动其父级(背景)时移动红色框,但我无法计算正确的位置,你能帮我吗?
另一个问题是为什么当我设置 .off('mousemove', mousemove')
时我无法关闭mousemove事件 非常感谢

最佳答案

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

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 。当然,这是纯粹语义上的事情。

关于拖动父级时Javascript移动子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36619663/

相关文章:

javascript - php 或 javascript session 规则弹出窗口

javascript - 为什么来自 jQuery 绑定(bind)的事件对象与 addEventListener 不同

javascript - 平滑滚动到页面上的特定元素

javascript - Chrome 标签页切换破坏了我的幻灯片放映

javascript - jquery-ajax 请求被拒绝

javascript - hasClass() 以字符串开头

javascript - 使用隐藏和显示时使浏览器的后退按钮起作用(jquery)

Javascript 文件包含在 html 页面中——浏览器下面会发生什么?

javascript - $.cookie ('name' ) 不是一个函数?

javascript - 如果选中了任何复选框,则选中复选框