我最近遇到了一些使用JQuery Draggable和Resizable插件的麻烦。寻找解决方案,我在许多不同的地方发现了一些非常分散的代码,最后归结为一个干净的解决方案,这似乎对我来说几乎是完美的。
我想我会和其他人分享我的发现,如果他们也遇到这个问题。
我有一个包含IFrame的div。这个div必须是可调整大小和可拖动的。足够简单 - 将jquery draggable和resizable添加到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:创建窗口的一些额外代码,当被选中时,会被带到其他可拖动的前面:
在可拖动的启动功能中 -
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);
答案 0 :(得分:15)
试试这个:
$('#Div').draggable({ iframeFix: true });
这应该有用。
答案 1 :(得分:4)
我所做的是定义<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
然后在dragstart事件中将body.dragging iframe {pointer-events: none;}
类添加到body并在dragend事件中将其删除。
对我来说很好,不知道为什么之前没有提到它,据我所知,指针事件CSS属性已经在2010年了。
答案 2 :(得分:3)
有很多方法可以实现这一目标,这取决于您的需求。我发现调整大小/拖动许多窗口会使UI减慢很多,因此我最终在调整大小/拖动开始时隐藏了iframe,并使用边框来帮助导航。
有一些jquery插件可以实现此功能的一部分,但很多插件都在使用iframe。
在前面也可以改善前置,并且可能无法在所有情况下都有效。
答案 3 :(得分:2)
为什么这么难?有更美丽的解决方案:
代码:
$("#Div").draggable({
start: function () {
$("iframe").css('z-index', '-1');
},
stop: function () {
$("iframe").css('z-index', '0');
}
});
答案 4 :(得分:1)
我首先也像Byron Cobb的解决方案一样,但是当我使用对话框元素并且在显示对话框时不需要Iframe(这是一个保存对话框)时,我喜欢使用modal选项:
$('#savingDialog').dialog({
modal: true
});
答案 5 :(得分: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可拖动的问题。在iframe中应用此代码时,将出现“不可拖动”问题。另外,请检查* .js文件的顺序,这会有所不同!