我们目前正在尝试在jQuery UI提供的可拖动和可排序之间实现跨框架拖动。这现在正常工作。但是,从父级拖动到子框架时,鼠标偏移似乎已关闭 - 请看这个小提琴:http://jsfiddle.net/r5nfe/6/。
父母的代码:
$('#my-frame').load(function () {
$('.draggable').draggable({
appendTo: 'body',
helper: 'clone',
iframeFix: true,
revert: 'invalid',
connectToSortable: $('#my-frame').contents().find('.sortable'),
cursorAt: { top: 0, left: 0 }
});
$('#my-frame').contents().find('.sortable').sortable({
iframeFix: true,
cursorAt: { top: 0, left: 0 }
});
});
子框架中的代码:
var containers = $('.sortable');
containers.sortable({
connectWith: containers,
cursor: 'move',
revert: true,
cursorAt: { top: 0, left: 0 }
});
有人可以告诉我们如何修复鼠标偏移吗?
答案 0 :(得分:5)
我添加了这个js函数,因为当你向iframe添加太多可拖动元素时,如果你向下滚动,拖动元素可以被可排序元素重叠
$('.draggable').on('dragstop',autoResize);
function autoResize(){
var newheight;
if(document.getElementById){
newheight=document.getElementById('my-frame').contentWindow.document .body.scrollHeight;
}
newheight=newheight+100;
$('#my-frame').css('height',newheight);
}
这里是new jsfiddle
最终解决方案2更新
此问题似乎是一个错误,有人已经提出了解决方案(基本上是一种解决方法):trasparent div solution
<强> 1 强> 我的第一个解决方案,在不更改代码的情况下,可以将iframe放在可拖动的东西之前,如here所示,代码:
<iframe id="my-frame" src="/VqxGf/3/show"></iframe>
<ul>
<li class="draggable">Drag me</li>
<li class="draggable">Drag me 2</li>
<li class="draggable">Drag me 3</li>
</ul>
<强> 2 强> 另一个似乎有效的解决方案是使用样式属性:ul的位置绝对包含可拖动的
<ul style="position:absolute">
<li class="draggable">Drag me</li>
<li class="draggable">Drag me 2</li>
<li class="draggable">Drag me 3</li>
</ul>
<iframe frameborder="0" id="my-frame" src="/ATu6F/30/show"></iframe>
iframe页面:
<ul id="sortable" style="margin-top:100px" class="sortable idle">
<li>Sortable</li>
<li>Sortable 2</li>
<li>Sortable 3</li>
</ul>
<ul id="sortable2" class="sortable idle">
<li>Sortable</li>
<li>Sortable 2</li>
<li>Sortable 3</li>
</ul>
希望这有帮助。
答案 1 :(得分:0)
我已经尝试this了。但它并不完美。
我在 parent.body 上更改了appendTo
,在顶部参数上更改了 100 的cursorAt
。
$('#my-frame').load(function () {
$('.draggable').draggable({
appendTo: 'parent.body',
helper: 'clone',
iframeFix: true,
revert: 'invalid',
connectToSortable: $('#my-frame').contents().find('.sortable'),
cursorAt: { top: 100, left: 0 }
});
$('#my-frame').contents().find('.sortable').sortable({
iframeFix: true,
cursorAt: { top: 0, left: 0 }
});
});