21

我最近在使用 JQuery Draggable 和 Resizable 插件时遇到了一些麻烦。在寻找解决方案时,我在许多不同的地方发现了一些非常零散的代码,最后提交了一个干净的解决方案,这似乎对我来说几乎完美地工作。

我想我会与其他人分享我的发现,如果他们也遇到这个问题。

我有一个包含 IFrame 的 div。这个 div 必须是可调整大小和可拖动的。很简单 - 将 jquery 可拖动和调整大小添加到 div 中,如下所示:

$("#Div").draggable();
$("#Div").resizable();

一切都很好,直到您拖动另一个包含 iframe 的 div 或尝试通过移动当前 iframe 来调整当前 div 的大小。当超过 iframe 时,这两个函数都会停止。

解决方案:

$("#Div").draggable({
    start: function () {
        $(".AllContainerDivs").each(function (index, element) {
        var d = $('<div class="iframeCover" style="zindex:99;position:absolute;width:100%;top:0px;left:0px;height:' + $(element).height() + 'px"></div>');
        $(element).append(d);});
    },
    stop: function () {
        $('.iframeCover').remove();
    }
});



$("#Div").resizable({
    start: function () {
        $(".AllContainerDivs").each(function (index, element) {
            var d = $('<div class="iframeCover" style="z-index:99;position:absolute;width:100%;top:0px;left:0px;height:' + $(element).height() + 'px"></div>');
            $(element).append(d);
        });
    },
    stop: function () {
        $('.iframeCover').remove();
    }
});

享受!

PS: Some extra code to create windows which, when selected, are brought to the front of the other draggables:

在可拖动的启动功能中 -

var maxZ = 1;
$(".AllContainerDivs").each(function (index, element) {
    if ($(element).css("z-index") > maxZ) {
        maxZ = $(element).css("z-index");
    }
});
$(this).css("z-index", maxZ + 1);
4

6 回答 6

16

尝试这个:

 $('#Div').draggable({ iframeFix: true });

这应该有效。

于 2010-11-17T09:23:38.097 回答
5

我所做的是定义body.dragging iframe {pointer-events: none;}然后dragging在 dragstart 事件上将类添加到 body 并在 dragend 事件上将其删除。

对我来说很好,不知道为什么之前没有提到它,据我所知,指针事件 CSS 属性在 2010 年就已经存在了。

于 2015-09-08T16:29:50.497 回答
3

有多种方法可以实现这一点,一切都取决于您的需求。我发现调整大小/拖动许多窗口会大大降低 UI 的速度,因此我最终在调整大小/拖动时隐藏了 iframe,并带有边框以帮助导航。

有一些 jquery 插件可以实现部分功能,但很多都与 iframe 有冲突。

带到前面也可以在某些方面得到改进,但可能并非在所有情况下都有效。

于 2010-10-26T13:34:24.277 回答
1

为什么这么难?还有更漂亮的解决方案:

  • 将您的 iframe 放入带有一些 z-index 的相对 div 中,例如 0
  • 也使 iframe 相对,并在拖动过程中将其 z-index 更改为 -1:

代码:

$("#Div").draggable({
    start: function () {
        $("iframe").css('z-index', '-1');
    },
    stop: function () {
        $("iframe").css('z-index', '0');
    }
});
于 2012-04-25T14:47:21.623 回答
1

我首先也喜欢 Byron Cobb 的解决方案,但由于我使用的是对话框元素并且显示对话框时不需要 Iframe(它是一个保存对话框),我喜欢使用modal选项:

$('#savingDialog').dialog({
    modal: true
});
于 2012-04-13T21:24:55.633 回答
0

所有很好的答案,但没有一个对我来说很容易实现!

我得到了帮助,但最后,我使用了:

在 iframe 标头<script>标签内:

var iframes = window.parent.$('iframe');
iframes.each(function () {
    if ($(this).attr('src') == '<YOUR SOURCE PATH>')
    $(this).css('z-index', '-1');
});

这是为了修复 TinyMCE IFrame Draggable 问题。在 iframe 中应用此代码时,Non-Draggable 问题。另外,检查 *.js 文件的顺序,它会有所不同!

于 2020-12-03T08:39:55.870 回答