欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue利用draggable實現多選拖拽效果

 更新時間:2022年05月06日 14:48:04   作者:宜簡  
這篇文章主要為大家詳細介紹了如何利用vue中的draggable插件實現多選拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

最近產品提出一個排序需求,希望能進行拖拽排序,我一想,vue2插件這么多,sortable.js、draggable分分鐘實現了,但是還有一個需求希望能夠實現多選拖拽,這個就有點麻煩,查詢了許多資料,暫時沒有發(fā)現能夠多選的拖拽組件,如果自己寫一個,既耗費時間,實現效果上必然沒有draggable這種成熟輪子效果好,于是決定基于draggable做改進。

實現思路

我們知道draggable插件只要設置相同的group名字就能實現分組拖拽,如果我們渲染兩個同名分組,控制第二個分組的顯示與隱藏,魚目混珠,就能實現簡單的多選拖拽效果

1.通過group="task"設置兩個同名分組,同時利用draggable=".card"屬性,控制class名稱,禁止單選

  <draggable group="task" v-model="dataList" @end="draggerEnd" class=""
        :class="show ? 'order-box-show' : 'order-box'" animation="300" draggable=".card">
        <transition-group>
          <div v-for="(item, index) in dataList" :key="index" class="box" @click="handleSelect(index)"
            :class="item.select || show ? 'card' : ''">{{ item.name }}
          </div>
        </transition-group>
      </draggable>
      <div class="position" v-show="show">
        <draggable group="task" v-model="dataList2" @end="draggerEnd" class="order-box" animation="300">
          <transition-group>
            <div v-for="(item, index) in dataList2" :key="index" class="boxs">
              <div>
                {{ item.name }}
              </div>
            </div>
          </transition-group>
        </draggable>

2.通過v-show="show"控制第二個分組的隱藏與展示,同時對數據做處理,并且在拖拽結束后,要在分組一中找到分組二拖拽過來的初始元素刪掉

    const findIndex = this.dataList.findIndex((item => item.name === '選中元素展示區(qū)'))
      this.dataList.splice(findIndex, 1)

Demo全部代碼

<template>
  <div>
    <div>
      <draggable group="task" v-model="dataList" @end="draggerEnd" class=""
        :class="show ? 'order-box-show' : 'order-box'" animation="300" draggable=".card">
        <transition-group>
          <div v-for="(item, index) in dataList" :key="index" class="box" @click="handleSelect(index)"
            :class="item.select || show ? 'card' : ''">{{ item.name }}
          </div>
        </transition-group>
      </draggable>
      <div class="position" v-show="show">
        <draggable group="task" v-model="dataList2" @end="draggerEnd" class="order-box" animation="300">
          <transition-group>
            <div v-for="(item, index) in dataList2" :key="index" class="boxs">
              <div>
                {{ item.name }}
              </div>
            </div>
          </transition-group>
        </draggable>
      </div>
    </div>
    <el-button style="marginLeft:50px" @click="handleStart">確認</el-button>
  </div>
</template>

<script>
import draggable from 'vuedraggable'
export default {
  components: {
    draggable
  },
  data() {
    return {
      dataList: [
      ],
      dataList2: [{ name: '選中元素展示區(qū)' }],
      show: false,
      selectArr: [],
    }
  },
  mounted() {
    for (var i = 0; i < 60; i++) {
      this.dataList.push({ name: i, select: false })
    }
  },
  methods: {
    handleSelect(index) {
      const data = JSON.parse(JSON.stringify(this.dataList))
      data[index].select = true
      this.selectArr.push({ ...data[index] })
      this.dataList = JSON.parse(JSON.stringify(data))
    },
    handleStart(e) {
      if (!this.selectArr.length) {
        return
      }
      this.show = true
      this.selectArr.forEach((item, index) => {
        const Index = this.dataList.findIndex(it => item.name === it.name)
        this.dataList.splice(Index, 1)
      })
    },
    draggerEnd(e) {
      const newIndex = e.newIndex
      this.dataList.splice(newIndex, 0, ...this.selectArr)
      const findIndex = this.dataList.findIndex((item => item.name === '選中元素展示區(qū)'))
      this.dataList.splice(findIndex, 1)
      this.show = false
    },


  }
}
</script>

<style lang="scss" scoped>
.order-box {
  padding: 20px 50px;
  display: flex;
  flex-wrap: wrap;

  >span {
    flex: 1;
    display: flex;
    flex-wrap: wrap;
  }

  .box {
    width: 100px;
    height: 50px;
    background: rgb(7, 174, 215);
    margin-right: 10px;
    margin-bottom: 10px;
  }

  .boxs {
    width: 100px;
    height: 50px;
    background: rgb(215, 177, 7);
    margin-right: 10px;
    margin-bottom: 10px;
  }

  .card {
    background: rgb(128, 68, 0) !important;
  }
}

.order-box-show {
  padding: 20px 50px;
  display: flex;
  flex-wrap: wrap;

  >span {
    flex: 1;
    display: flex;
    flex-wrap: wrap;
  }

  .box {
    width: 100px;
    height: 50px;
    background: rgb(7, 174, 215);
    margin-right: 10px;
    margin-bottom: 10px;
  }

  .boxs {
    width: 100px;
    height: 50px;
    background: rgb(215, 177, 7);
    margin-right: 10px;
    margin-bottom: 10px;
  }
}

.position {
  border: 1px solid red;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  cursor: pointer;
}
</style>

Demo實現效果

到此這篇關于Vue利用draggable實現多選拖拽效果的文章就介紹到這了,更多相關Vue draggable多選拖拽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue?element-plus圖片預覽實現方法

    vue?element-plus圖片預覽實現方法

    這篇文章主要給大家介紹了關于vue?element-plus圖片預覽實現的相關資料,最近的項目中有圖片預覽的場景,也是踩了一些坑,在這里總結一下,需要的朋友可以參考下
    2023-07-07
  • Vue配置proxy代理接口報錯2007 bad domain的解決

    Vue配置proxy代理接口報錯2007 bad domain的解決

    本文主要介紹了Vue配置proxy代理接口報錯2007 bad domain的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • nuxt踩坑之Vuex狀態(tài)樹的模塊方式使用詳解

    nuxt踩坑之Vuex狀態(tài)樹的模塊方式使用詳解

    這篇文章主要介紹了nuxt踩坑之Vuex狀態(tài)樹的模塊方式使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Vue.js實現圖片切換功能

    Vue.js實現圖片切換功能

    這篇文章主要為大家詳細介紹了Vue.js實現圖片切換功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • vue3中使用props和emits并指定其類型與默認值

    vue3中使用props和emits并指定其類型與默認值

    props是Vue3中的一個重要概念,它允許我們將數據從父組件傳遞到子組件,下面這篇文章主要給大家介紹了關于vue3中使用props和emits并指定其類型與默認值的相關資料,需要的朋友可以參考下
    2023-04-04
  • Vue之自定義事件內容分發(fā)詳解

    Vue之自定義事件內容分發(fā)詳解

    這篇文章主要為大家介紹了Vue的自定義事件內容分發(fā),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • vue中的.$mount(''#app'')手動掛載操作

    vue中的.$mount(''#app'')手動掛載操作

    這篇文章主要介紹了vue中.$mount('#app')手動掛載操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue.js前后端數據交互之提交數據操作詳解

    vue.js前后端數據交互之提交數據操作詳解

    這篇文章主要介紹了vue.js前后端數據交互之提交數據操作,結合實例形式較為詳細的分析了vue.js前后端數據交互相關的表單結構、約束規(guī)則、數據提交等相關操作技巧與注意事項,需要的朋友可以參考下
    2018-04-04
  • vue自定義組件如何通過v-model指令控制組件的隱藏、顯示

    vue自定義組件如何通過v-model指令控制組件的隱藏、顯示

    這篇文章主要介紹了vue自定義組件如何通過v-model指令控制組件的隱藏、顯示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue3環(huán)境安裝以及項目搭建全過程

    Vue3環(huán)境安裝以及項目搭建全過程

    Vue工程化項目環(huán)境配置還是比較麻煩的,下面這篇文章主要給大家介紹了關于Vue3環(huán)境安裝以及項目搭建的相關資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論