基于百分比将项目拖动到包含元素中。

16

以下是它的外观:

$( "#box ul li" ).draggable({
    helper: "clone"
});
$( ".item" ).draggable({containment: ".door"});

$( ".door" ).droppable({
    accept: ":not(.ui-sortable-helper, .item)",
    drop: function( event, ui ) {
       $( "<div class='item'></div>" ).html(ui.draggable.find("img")).appendTo(this);
    }
});

用户拖动 $( "#box ul li" ) 元素并将其放在 $(".door") 元素上。然后,它使用 $(".item") 选择器将其添加到 $(".door") 元素中。

我正在使用jquery UI - Draggable来拖放项目。在这方面没有任何问题。

以下是实际问题;

但是当您开始拖动元素时,函数会更改元素的左侧和顶部位置,例如;top:10px left:10px。 但我想基于百分比对可容纳元素进行拖动。应该是top:10%; left:10%

有什么想法吗?

3个回答

25

我已经找到了一个解决方案;

$( ".item" ).draggable({
  containment: ".door",
  stop: function( event, ui ) {
   $(this).css("left",parseInt($(this).css("left")) / ($(".door").width() / 100)+"%");
   $(this).css("top",parseInt($(this).css("top")) / ($(".door").height() / 100)+"%");
  }
});

@RecepSimsek 我有一个类似的问题。我想知道你能否给我一些指导。 - john

5

以下是稍微更新过的所有内容:

$('.element').draggable({
    containment: 'parent',
    stop: function( event, ui ) {
        var $elm = $(this);
        var pos = $elm.position(),
            parentSizes = {
                height: $elm.parent().height(),
                width: $elm.parent().width()
            };

        $elm.css('top', ((pos.top/parentSizes.height) * 100) + '%').css('left', ((pos.left/parentSizes.width) * 100) + '%');
}});

5
尝试这段代码:
$( ".element" ).draggable({

    stop: function (){
     var l = ( 100 * parseFloat($(this).css("left")) / parseFloat($(this).parent().css("width")) )+ "%" ;
     var t = ( 100 * parseFloat($(this).css("top")) / parseFloat($(this).parent().css("height")) )+ "%" ;
     $(this).css("left" , l);
     $(this).css("top" , t);
     }

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接