<div class=".items">

  <div class="item"><div class="sort"></div>

  <div class="item"><div class="sort"></div>

</div>

<style>

  .items {

        /*
         * 该对象必须设置postion为相对或绝对定位,因为被拖动的对象定位是absolute
         * 如果容器没有positin的话,拖动时对象就会相对于最外层有position的元素来显示位置
         */

    position: relative; 

  }

</style>

<script>

    Array.prototype.move = function (findex, tindex) {
        this.splice(tindex, 0, this.splice(findex, 1)[0]);
        }

    // 启用拖动排序
    $('.items').sortable({
        items: '.item',
        handle: '.sort',
        axis: 'y', // 限制在Y轴方向拖动
        containment: '.items', // 限制在.item容器内拖动,一般不用设置,设置了反而会导致拖动时移动不灵活,特别很难把元素拖动到最后一个元素下面,除非容器底部有比较大的间隙可容纳一个元素
        start: (event, ui) => {
            ui.item.attr('sort', ui.item.index());
        },
        update: (event, ui) => {
            var fSort = ui.item.attr('sort');
            var tSort = ui.item.index();
            items.move(fSort, tSort);
            for (var i = tSort; i < items.length; i++) {
                items[i].sort = i;
            }
            for (var i = tSort - 1; i > -1; i--) {
                items[i].sort = i;
            }
            ui.item.removeAttr('sort');
        }
    });

</script>

 

posted on 2021-07-27 09:59  lbnnbs  阅读(210)  评论(0编辑  收藏  举报