如何在删除小部件后定位jquery gridster?

时间:2016-04-01 13:56:57

标签: gridster

我可以移除小部件,但我面临着定位剩余小部件的问题。

当我从顶部删除小部件时,底部小部件将自动移动到顶部,看起来不错。但是当我从左边删除一个小部件时,右边的小部件不会被移动到左边?

1 个答案:

答案 0 :(得分:0)

最后我解决了这个问题

<div class="gridster">
    <ul>
      <li data-row="1" data-col="1" data-sizex="2" data-sizey="2">0<span class="removeWidget">X</span></li>
      <li data-row="1" data-col="3" data-sizex="1" data-sizey="2">1<span class="removeWidget">X</span></li>
      <li data-row="1" data-col="4" data-sizex="1" data-sizey="1">2<span class="removeWidget">X</span></li>
      <li data-row="3" data-col="2" data-sizex="3" data-sizey="1">3<span class="removeWidget">X</span></li>
      <li data-row="4" data-col="1" data-sizex="1" data-sizey="1">4<span class="removeWidget">X</span></li>
      <li data-row="3" data-col="1" data-sizex="1" data-sizey="1">5<span class="removeWidget">X</span></li>
      <li data-row="4" data-col="2" data-sizex="1" data-sizey="1">6<span class="removeWidget">X</span></li>
      <li data-row="5" data-col="2" data-sizex="1" data-sizey="1">7<span class="removeWidget">X</span></li>
      <li data-row="4" data-col="4" data-sizex="1" data-sizey="1">8<span class="removeWidget">X</span></li>
      <li data-row="1" data-col="5" data-sizex="1" data-sizey="3">9<span class="removeWidget">X</span></li>
    </ul>
  </div>

<script type="text/javascript">
      var gridster;

      $(function()
      {
        create_gridster();
          function create_gridster()
          {
            gridster = $(".gridster ul").gridster({

              helper: 'clone',
              resize: {
                enabled: true,
                start: function (e, ui, $widget) {
                    console.log("started the resize event");
                },
                stop: function (e, ui, $widget) {
                    var newHeight = this.resize_coords.data.height;
                    var newWidth = this.resize_coords.data.width;
                }
              },
              draggable:
              {
                  enabled: true,
                  start: function(event, ui){
                    console.log("started the draggable event");
                  },
                  stop: function (e, ui, $widget) {

                        console.log($(this));
                        console.log($(ui)[0].$helper.context);
                         console.log("stoped the draggable event");
                    }

              }
            }).data('gridster');
            }




$(".removeWidget").click(function(e)
            {
                var $div=$(e.target).parent();
                //removed the selected widget
                gridster.remove_widget($div);

                //Get available columns
                var cols=[];
                $.each(gridster.serialize(),function(i,item){
                    if($.inArray(item.col,cols)===-1){
                        cols.push(item.col);
                    }
                });

                gridster.destroy(false);
                //remove element of the removed widget
                $div.remove();

                //Get empty column( no widgets in that column)
                var emptyCol=0;
                $.each(cols,function(i,item){
                    if($.inArray(i+1,cols)===-1)
                        emptyCol=i+1;
                });

                //Verify if any of the widget accupies the empty column
                var isEmptyCol=false;
                $("ul li").each(function(e){
                    var col=$(this).attr("data-col");
                    if(col<emptyCol && !isEmptyCol){
                        isEmptyCol=emptyCol-col===$(this).attr("data-sizex")?false:true;
                    }
                });

                //Fill the empty column from the next columns
                if(emptyCol!==0){
                    var rowCol={};
                    $("ul li").each(function(e){
                        var col=$(this).attr("data-col");
                        var row=$(this).attr("data-row");

                        if(col>emptyCol && isEmptyCol)
                        {
                            $(this).attr("data-col",col-1);
                            $(this).data("col",col-1);
                        }
                    });
                }

                //redraw the gridster
                create_gridster();
          });

      });

    </script>