【问题标题】:Make a div movable but not its child elements使 div 可移动,但不能使其子元素
【发布时间】:2013-10-01 08:19:41
【问题描述】:

我正在尝试使 div 可移动。 div 有子 div 元素。你可以在这里查看 jsfiddle:http://jsfiddle.net/TsW5F/2/

我只希望容器(在大多数 div 之外)是可移动的。目前,内部文本可以在没有外部 div 的情况下移动。最外层的容器 div 应该始终与其余的子元素一起移动。

    <div id="id">
           <div>second div</div>
           <div>third element</div>
   </div>

$(document).ready(function() {
    var $dragging = null;

    $(document.body).on("mousemove", function(e) {
        if ($dragging) {
            $dragging.offset({
                top: e.pageY,
                left: e.pageX
            });
        }
    });

    $('#id').on("mousedown", null , function (e) {
        $dragging = $(e.target);
    });

    $(document.body).on("mouseup", function (e) {
        $dragging = null;
    });
});

【问题讨论】:

  • 由于内部 div 属于外部 div,它们将始终与外部 div 一起移动...除非您将它们从 div 内部移除并将它们放在外部 div...跨度>
  • 我也想移动内部子元素,但不能没有外部主 div。将编辑问题以澄清这一点。
  • @devnull69:如果它们绝对定位,则不会。
  • 我需要在这里澄清一下:即使您将内部 div 和外部 div 都定位为绝对值,内部 div 也将相对于外部 div 放置。因此,如果您移动外部 div,内部 div 也会随之移动。查看简单示例:jsbin.com/olOSahI/1/edit 并更改外部 div 的顶部/左侧属性
  • 天哪...我现在看到 OP 已经更改了描述。他实际上希望内部 div 与外部 div 一起移动,但不是单独移动......

标签: javascript jquery dom


【解决方案1】:

问题出在$dragging = $(e.target);这一行,改为使用$dragging = $(this);

$(document).ready(function () {
    var $dragging = null;

    $(document.body).on("mousemove", function (e) {
        if ($dragging) {
            $dragging.offset({
                top: e.pageY,
                left: e.pageX
            });
        }
    });

    $('#id').on("mousedown", null, function (e) {
        $dragging = $(this);
    });

    $(document.body).on("mouseup", function (e) {
        $dragging = null;
    });
});

演示:Fiddle

【讨论】:

  • 非常简洁的解决方案。会接受,但 TrueBlueAussie 是第一个。希望你不要介意。
  • +1:您的解决方案更优雅。我自己应该想到的。
  • @TrueBlueAussie 你甚至可以使用e.currentTarget
【解决方案2】:

只需检查拖动开始它实际上是父 div:

http://jsfiddle.net/TsW5F/4/

$('#id').on("mousedown", null , function (e) {
    if ($('#id').is(e.target))
    {
        $dragging = $(e.target);
    }
});

正如 Arun P Johny 在 $(this) 之后指出的那样,将给出 JQuery 目标而不是鼠标目标。这意味着$dragging = $(this) 更简洁。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 2015-06-21
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多