Sortablejs 首行不能移动并且其他行不能覆盖

<template>
  <div class="item-container" ref="sortableList">
    <div
      :class="['item', 'item-' + index]"
      v-for="(item, index) in formData.tarbarList"
      :key="index"
      :data-index="index"
    ></div>
  </div>
</template>

<script setup lang="ts" name="bottomNavigator">
import Sortable from 'sortablejs'
import { nextTick, onMounted, ref } from 'vue'

const formData = ref({
  tarbarList: [
    {
      pagePath: undefined,
      iconPath: '',
      selectedIconPath: '',
      text: '首页'
    }
  ]
})

const sortableList = ref<any>(null)
function sortHandle() {
  Sortable.create(sortableList.value, {
    animation: 150,
    ghostClass: 'sortable-ghost', // 设置虚影类名
    filter: '.item-0',
    onMove: function (evt) {
      // evt.related 即将移动到的位置
      console.log('evt.related', evt.related)
      const canSort = evt.related.getAttribute('data-index') // 获取 data-id 属性
      // 如果是,阻止这次移动
      return Number(canSort) !== 0
    },
    onUpdate: function (evt: { oldIndex: number; newIndex: number }) {
      const newIndex = evt.newIndex
      const oldIndex = evt.oldIndex
      const movedItem = formData.value.tarbarList.splice(oldIndex, 1)[0] // 从旧位置移除元素
      formData.value.tarbarList.splice(newIndex, 0, movedItem) // 在新位置插入元素
      const list = formData.value.tarbarList.map((item) => {
        return {
          ...item
        }
      })
      // 必须清除先
      formData.value.tarbarList = []
      nextTick(() => {
        formData.value.tarbarList = list
      })
    }
  })
}

onMounted(() => {
  // 排序
  sortHandle()
})
</script>

<style lang="scss" scoped></style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清云随笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值