jQuery Drag and Droppable - 如果可放置区域具有li元素,则隐藏占位符

时间:2015-04-30 07:51:39

标签: jquery jquery-ui jquery-draggable jquery-droppable

我正在使用jQuery Droppable插件。

如果Dropped <ul>包含一个或多个元素,我想隐藏占位符。它适用于Drag n Drop功能。最重要的是,我还实现了点击方法。它还将通过在Dragged容器中查看星形图标来克隆<li>元素。但在这种方法中,我无法隐藏占位符。

  

FIDDLE

enter image description here

请检查以下代码:::

  

HTML

<div class="mn-items">
  <h2>Drag</h2>
  <div id="catalog">
      <ul class="rp-draggable">
        <li class="one">Item 1 <i class="fa fa-star-o"></i></li>
        <li class="two">Item 2 <i class="fa fa-star-o"></i></li>
        <li class="three">Item 3 <i class="fa fa-star-o"></i></li>
        <li class="four">Item 4 <i class="fa fa-star-o"></i></li>
        <li class="five">Item 5 <i class="fa fa-star-o"></i></li>
        <li class="six">Item 6 <i class="fa fa-star-o"></i></li>
      </ul>
  </div>
</div>

<div class="header-favorites">
  <h2>Drop Here...</h2>
    <ul class="h-droped-list">
      <li class="placeholder">Placeholder (hides if it has items)</li>
    </ul>
</div>
  

的jQuery

$(document).ready(function(){

    /* jQuery Droppable */
    $(function() {
        $( ".mn-items .rp-draggable li" ).draggable({
            appendTo: "body",
            helper: "clone"
        });
        $( ".header-favorites ul" ).droppable({
            activeClass: "ui-state-default",
            hoverClass: "ui-state-hover",
            accept: ":not(.ui-sortable-helper)",
            drop: function( event, ui ) {
                $( this ).find( ".placeholder" ).remove();
                $(ui.draggable).clone().appendTo(this);
            }
        }).sortable({
            items: "li:not(.placeholder)",
            sort: function() {
                $( this ).removeClass( "ui-state-default" );
            }
        });
    });


    /* Click Star Icon to Add to Drop Here Container */
    $('ul.rp-draggable li .fa-star-o').click(function(){
        $(this).closest('li').clone().appendTo('.h-droped-list');
        $(this).closest('li').toggleClass('addedToFav');
    });

    /* Click Close Icon to Remove from Drop Here Container */
    $("ul.h-droped-list").on('click','li .fa-star-o',function(){
        $(this).closest('li').remove();
    });

    /* Hide Placeholder if it has Items, Show if it is empty */
    if($(".header-favorites ul li:not(.placeholder)").length > 0) {
        $(".header-favorites ul li.placeholder").hide();
    }else{
        $(".header-favorites ul li.placeholder").show();
    }


});

1 个答案:

答案 0 :(得分:1)

我会给你一个Fiddle的链接。我做了一些可能对你有帮助的更新,但你还有一些工作要做。如果你需要,我会在以后帮助你。

JS

$(document).ready(function(){

/* jQuery Droppable */
$(function() {
    $( ".mn-items .rp-draggable li" ).draggable({
        appendTo: "body",
        helper: "clone"
    });
    $( ".header-favorites ul" ).droppable({
        activeClass: "ui-state-default",
        hoverClass: "ui-state-hover",
        accept: ":not(.ui-sortable-helper)",
        drop: function( event, ui ) {
            $( this ).find( ".placeholder" ).hide();
            $(ui.draggable).clone().appendTo(this);
        }
    }).sortable({
        items: "li:not(.placeholder)",
        sort: function() {
            $( this ).removeClass( "ui-state-default" );
        }
    });
});


/* Click Star Icon to Add to Drop Here Container */
$('ul.rp-draggable li .fa-star-o').click(function(){
    var $target = $(this).closest("li"),
        $dropedList = $(".h-droped-list");

    if(!$target.hasClass("addedToFav")){
        $target
          .addClass("addedToFav")
          .clone()
          .appendTo($dropedList);

        $dropedList
         .find(".placeholder")
         .hide();
    }else{
        //do what you want
    }

});

/* Click Close Icon to Remove from Drop Here Container */
$("ul.h-droped-list").on('click','li .fa-star-o',function(){
    var $target = $(this).closest("li"),
        $dropList = $target.parent("ul");

    $target.remove();



    if($dropList.children().length == 1){
        var $lastItem = $($dropList.children()[0]);
        $lastItem.hasClass("placeholder") && $lastItem.show();
    }

});

/* Hide Placeholder if it has Items or Show if it is empty */
if($(".header-favorites ul li:not(.placeholder)").length > 0) {
    $(".header-favorites ul li.placeholder").hide();
}else{
    $(".header-favorites ul li.placeholder").show();
}

});