具有可拖放可拖动和可调整大小的 Jquery 无法按预期工作

Posted

技术标签:

【中文标题】具有可拖放可拖动和可调整大小的 Jquery 无法按预期工作【英文标题】:Jquery with droppable draggable and resizable is not working as expected 【发布时间】:2011-11-19 13:55:54 【问题描述】:

可调整大小的 Droppable 内的 JQueryUI Draggable 不起作用。想法是能够拖动被拖放到 div 的元素,并调整拖放元素的大小。

工作代码:http://jsfiddle.net/lukaszjg/GvDLh/

问题重现说明:

    将“拖我”拖到“要放置的地方”
      尝试调整大小 尝试将拖动的元素拖入“放置位置” 再次尝试调整拖动元素的大小 - 未按预期工作

请在下面的代码中找到#dragme 和#droppable 对应的div。 知道如何解决吗?

$("#dragme").draggable(
helper: 'clone',
cursor: 'move',
tolerance: 'fit'

);

var x = null;
$("#droppable").droppable(
drop: function(e, ui) 

x = ui.helper.clone();

x.draggable(
helper: 'original',
containment: '#droppable',
tolerance: 'fit'
);

x.resizable();
x.appendTo('#droppable');
ui.helper.remove();

);

【问题讨论】:

顺便说一句,jsfiddle 对我来说很好用。唯一的问题是,当您尝试选择右下角时,我的浏览器 (Chrome) 非常挑剔,因此您可以在 2 维中调整大小。 @m90:观察 DOM,看看当你再次拖放时,你是否会得到一组 .ui-resizable-handle 元素。 z-index 冲突的结果可能取决于浏览器。 【参考方案1】:

当你将一个可调整大小的小部件绑定到一个元素时,它会添加几个<div class="ui-resizable-handle"> 元素。然后,在你的 drop 回调中,你有这个:

x = ui.helper.clone();

这将克隆.ui-resizable-handle 元素以及您要克隆的元素。几行之后,你有:

x.resizable();

显然,.ui-resizeable-handle 元素的存在使该调用变得混乱;它最终会添加一组额外的 .ui-resizeable-handle 元素,但它们可能由于 z-index 问题而无法工作:原件将(可能)在它们之上并阻止所有事件下降到 .ui-resiable-handle 元素具有附加到它们的事件处理程序。如果在使克隆可调整大小之前手动删除有问题的<div>s:

x.find('.ui-resizable-handle').remove();
x.resizable();

然后就可以了:

$("#droppable").droppable(
    drop: function(e, ui) 
        x = ui.helper.clone();
        x.draggable(
            helper: 'original',
            containment: '#droppable',
            tolerance: 'fit'
        );
        x.find('.ui-resizable-handle').remove();
        x.resizable();
        x.appendTo('#droppable');
        ui.helper.remove();
    
);

更新小提琴:http://jsfiddle.net/ambiguous/xZECa/

仅仅调用x.resizable('destroy') 来清理它是行不通的,因为x 无法调整大小,所以没有任何反应。

应该有更好的方法来完成这项工作,但我还不知道它是什么。

【讨论】:

【参考方案2】:

我在试验你的解决方案时遇到了一些麻烦,但你让我上路了,所以如果这对其他人有帮助,我会描述我的问题和解决方案。

我的案例:一个计划,其中包含代表每个员工的可放置 div,以及代表任务的可拖动、可调整大小的 div。

问题:完全一样,只是我的“任务”已经是 droppable 的子项(来自数据库)并且有很多 .data() 东西,所以克隆是一团糟。 droppable drop 事件引发错误“无法转换 javascript 参数”并破坏我的应用程序阻止任何进一步的拖动。

在看到您的解决方案并且在我的情况下无法重现它之后,我回到了基础:

“如果你有伐木工人智商,就用斧头”。

所以这里的东西:

$("#dragme").draggable(
helper: 'original', //Needed in my case
cursor: 'move',
tolerance: 'fit',

start: function(event,ui)
$(this).resizable( "destroy" );/* The resizable generates troubles to the droppable?
Well let's remove the problem...
*/
 

).resizable(
/*All my functions to apply to the task when resized*/

);// I'm creating the resizable immediately because needed to attribute more or less time to the task 


$("#droppable").droppable(
drop: function(e, ui) 
/*All my drop functions to manage the task*/

//creating the resizable again PROBLEM SOLVED
$(ui.draggable).resizable(
/*All my functions to apply to the task when resized*/
);


);

希望对你有帮助

注意:我不太确定我的英语水平,所以如果出现错误或拼写错误,请参阅“回到基础”部分并原谅我 ;-)。

【讨论】:

【参考方案3】:

一旦你附加了“.resizable()”元素,首先销毁事件,然后附加。 它会起作用的。 //$(ele) 是一个对象。

$(ele).resizable().resizable("destroy"); $(ele).draggable(); $(ele).resizable( animate: 'true', ghost: 'true', handles: 'ne, nw, se, sw', );

【讨论】:

以上是关于具有可拖放可拖动和可调整大小的 Jquery 无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

防止jquery draggable跳入可调整大小的droppable

可拖放 可拖动 附加到位置

jQuery 可拖动和可拖放,在可拖动 ul 上滚动

jquery UI 图像可调整大小但不可拖动?

如何在使用 jQuery(可拖动和可调整大小)拖动光标时调整图像大小

Jquery\ASP.NET 可拖动和可调整大小的项目列表