jQuery - 保持可拖动的克隆

时间:2011-07-12 23:29:36

标签: jquery asp.net-mvc-3

我为我的draggables使用了clone helper,但是在我拖动克隆并删除它后,它不会保留在droppables中。我浏览了一些示例,并在drop事件中添加.append(),但是draggable不会保留在我放下的位置。任何想法如何让可拖动的克隆保持在它被丢弃的位置? 这是我脚本的一部分(我声明了一个选项变量来存储drop事件的选项):

            var element = ui.draggable.children();
            var oldID = element.attr('id');
            element.attr('id', (oldID + '_' + counter));
            var pos = element.offset();
            var clone = element.clone();
            clone.width(element.width());
            clone.height(element.height());
            $(clone).css({
                "left": pos.left,
                "top": pos.top
            });
            $('#rightframe').append(clone);

感谢任何帮助......


这是我的剧本:

    var counter = 0;
    var options = {};
    options.accept = '.image';
    options.drop = function (event, ui) {

        if (ui.draggable.children().attr('id').match(/_(\d+)$/) != null) {
            // If ID contains number after an underscore, call UpdatePosition action
            var temp = ui.draggable.children();
            alert('inside if');
            updatePosition(temp);
        }
        else {
            // Image not exist, call CreateContainer action
            counter++;
            var element = ui.draggable.children();
            var oldID = element.attr('id');
            element.attr('id', (oldID + '_' + counter));
            var pos = element.offset();
            var clone = element.clone();
            clone.width(element.width());
            clone.height(element.height());
            $(clone).css({
                "left": pos.left,
                "top": pos.top
            });
            $('#rightframe').append(clone);
            updateImage(element, oldID);

        }
    }
    $('#rightframe').droppable(options);

1 个答案:

答案 0 :(得分:0)

我在webapp中做同样的事情。我的问题是两件事。

  1. 克隆看似混乱,具有可拖动/可放置的功能。
  2. 获取可拖动的偏移量朝向屏幕,而在克隆上设置位置并将其附加到#rightframe使得它是#rightframe对象的偏移...例如,如果#rightframe的偏移量为10 ,10和可拖动的偏移是20,20。克隆到屏幕的最终偏移量为30,30。
  3. 我的解决方案如下:

    首先放弃。销毁droppable中的所有jquery-ui句柄,并在drop函数结束时重新创建它。 (您的情况可能只是调用$('#rightframe').droppable("destroy")$('#rightframe').droppable(options);

    在破坏和创造之间的第二个。通过减去$(“#rightframe”)的偏移来计算偏移量,如此

    var adjust = $("#rightframe").offset();
    $(clone).css({
        "left": pos.left-adjust.left,
        "top": pos.top-adjust.top
    });
    

    这里希望我理解你的问题是正确的:)