如何调整克隆的 jQuery UI 元素的大小(图片)

Posted

技术标签:

【中文标题】如何调整克隆的 jQuery UI 元素的大小(图片)【英文标题】:How do you resize a cloned jQuery UI element (image) 【发布时间】:2012-04-06 15:08:52 【问题描述】:

我有一些特别需要克隆一个元素(图像)并在容器内可拖动,并且在容器内仍然保留其可拖动(但不能克隆)。

我只想让拖动到容器内的克隆元素也可以重新调整大小,但我无法让它工作。

我只能让父元素调整大小。有没有办法只 .resize 克隆的元素?

有些古怪但有效的例子:http://jsfiddle.net/rGUma/4/

代码:

<div class="drag"><img src="..." /></div>
<div class="drag"><img src="..." /></div>
<div class="drag"><img src="..." /></div>
<div class="drop-zone"></div>


  <script>
    $(".drop-zone").droppable(
        accept: '.drag',
        drop: function(event, ui) 
            var $clone = ui.helper.clone();
            if (!$clone.is('.inside-drop-zone')) 
                $(this).append($clone.addClass('inside-drop-zone').draggable(
                     containment: '.drop-zone'
                ));
            
        
    );
    $(".drag").draggable(
        helper: 'clone'
    );

    //this works but I dont want it on outside elements
     $( '.drag' ).resizable(  
      helper: "ui-resizable-helper"
    );

     //this doesn't work on cloned images but what I want working       
    $( '.drop-zone img' ).resizable(  
      helper: "ui-resizable-helper"
    );        

    // '.inside-drop-zone img'  also doesnt work

);​

</script>

ps。如果有人能解释为什么它不起作用,将不胜感激。

【问题讨论】:

【参考方案1】:

它不起作用,因为克隆从未设置为可调整大小。 .resizable 仅适用于开始时存在的元素,而不适用于您创建的任何新元素。

我将可调整大小的调用移动到克隆部分以将其应用于克隆。这也意味着外部框不可调整大小,根据您的 cmets in 源 (updated jsfiddle):

$(document).ready(function($) 

    $(".drop-zone").droppable(
        accept: '.drag',
        drop: function(event, ui) 
            var $clone = ui.helper.clone();
            if (!$clone.is('.inside-drop-zone')) 
                $(this).append($clone.addClass('inside-drop-zone').draggable(
                    containment: '.drop-zone'
                ));

                $clone.resizable( //this works but I dont want it to on outside elements
                    helper: "ui-resizable-helper"
                );
            
        
    );
    $(".drag").draggable(
        helper: 'clone'
    );


    $('.drop-zone img').resizable( //this doesn't work because its cloned "inside" but its what I want working
        helper: "ui-resizable-helper"
    );


    // '.inside-drop-zone img'  also doesnt work
    // 
);

【讨论】:

【参考方案2】:

在克隆出生时将可调整大小的创建绑定到某种事件?

$('.drop-zone').on('hover', '.drag', function() 
    $(this).resizable(  
       helper: "ui-resizable-helper"
    );
);

【讨论】:

【参考方案3】:

只需使用:

$clone.children().resizable(
    helper: "ui-resizable-helper"
);

class: drop-zone 下的所有图片都将重新调整大小。

【讨论】:

以上是关于如何调整克隆的 jQuery UI 元素的大小(图片)的主要内容,如果未能解决你的问题,请参考以下文章

JQuery UI - resizable调整区域大小

如何克隆已被 jQuery UI Widget 绑定的元素?

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

如何使用 jQuery UI 获取可拖动和可调整大小元素的坐标

保存元素位置和大小(JQuery ui 可调整大小和可拖动)

可调整大小的画布(JQuery UI)