亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue實現(xiàn)列表拖拽排序的功能

 更新時間:2020年11月02日 14:18:09   作者:陳山豆  
這篇文章主要介紹了vue實現(xiàn)列表拖拽排序的功能,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下

  在日常開發(fā)中,特別是管理端,經(jīng)常會遇到要實現(xiàn)拖拽排序的效果;這里提供一種簡單的實現(xiàn)方案。

  此例子基于vuecli3

首先,我們先了解一下js原生拖動事件:

  在拖動目標(biāo)上觸發(fā)事件 (源元素):

  • ondragstart - 用戶開始拖動元素時觸發(fā)
  • ondrag - 元素正在拖動時觸發(fā)
  • ondragend - 用戶完成元素拖動后觸發(fā)  

  釋放目標(biāo)時觸發(fā)的事件:

  • ondragenter - 當(dāng)被鼠標(biāo)拖動的對象進入其容器范圍內(nèi)時觸發(fā)此事件
  • ondragover - 當(dāng)某被拖動的對象在另一對象容器范圍內(nèi)拖動時觸發(fā)此事件
  • ondragleave - 當(dāng)被鼠標(biāo)拖動的對象離開其容器范圍內(nèi)時觸發(fā)此事件
  • ondrop - 在一個拖動過程中,釋放鼠標(biāo)鍵時觸發(fā)此事件

 基于js的原生拖拽事件,本次實現(xiàn)的拖拽排序的原理大概是:鼠標(biāo)按住列表某一項開始拖動時觸發(fā)ondragstart事件,將該拖動項用變量記錄下來;

接著拖拽過程中,該拖動項經(jīng)過列表其他項時,觸發(fā)ondragenter事件,同樣記錄該拖動項最后經(jīng)過的列表其他項的數(shù)據(jù),最后在ondragend 事件中

將數(shù)組列表刪掉一開始o(jì)ndragstart事件記錄的拖動項,并將刪掉的數(shù)據(jù)插入ondragenter事件最后記錄的位置,完成拖動排序。

 具體代碼如下:

<template>
  <div class="test_wrapper" @dragover="dragover($event)">
    <transition-group class="transition-wrapper" name="sort">
      <div v-for="(item) in dataList" :key='item.id' class="sort-item"
        :draggable="true"
        @dragstart="dragstart(item)"
        @dragenter="dragenter(item,$event)"
        @dragend="dragend(item,$event)"
        @dragover="dragover($event)"
      >
        {{ item.label }}
      </div>
    </transition-group>
  </div>
</template>

<script lang="ts">
  import {Vue, Component, Prop, Watch} from "vue-property-decorator";
  import { addWebsite } from '@/api'
  @Component({
    components: {}
  })
  export default class Test extends Vue {

    oldData: any = null; // 開始排序時按住的舊數(shù)據(jù)
    newData: any = null; // 拖拽過程的數(shù)據(jù)

    // 列表數(shù)據(jù)
    dataList:any = [
      { id:1,label:'測試一號' },
      { id:2,label:'測試二號' },
      { id:3,label:'測試三號' },
      { id:4,label:'測試四號' },
    ];

    dragstart(value: any) {
      this.oldData = value
    }

    // 記錄移動過程中信息
    dragenter(value: any, e: any) {
      this.newData = value
      e.preventDefault()
    }

    // 拖拽最終操作
    dragend(value: any, e: any) {
      if (this.oldData !== this.newData) {
        let oldIndex = this.dataList.indexOf(this.oldData)
        let newIndex = this.dataList.indexOf(this.newData)
        let newItems = [...this.dataList]
        // 刪除老的節(jié)點
        newItems.splice(oldIndex, 1)
        // 在列表中目標(biāo)位置增加新的節(jié)點
        newItems.splice(newIndex, 0, this.oldData)
        this.dataList = [...newItems]
      }
    }


    // 拖動事件(主要是為了拖動時鼠標(biāo)光標(biāo)不變?yōu)榻梗?
    dragover(e: any) {
      e.preventDefault()
    }


  };
</script>

另外

  為了實現(xiàn)拖動的動畫效果,這里用到了transition-group組件,如上面代碼顯示,將transition-group組件的屬性name設(shè)為‘sort';并添加以下代碼;

    .sort-move {
      transition: transform 0.3s;
    }

       注意:為了讓transition有效果出現(xiàn),v-for渲染的數(shù)據(jù)列表必須有key屬性,且該key屬性不可設(shè)為index; 

最終效果如下:

以上就是vue實現(xiàn)列表拖拽排序的功能的詳細(xì)內(nèi)容,更多關(guān)于vue 拖拽排序的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解

    vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解

    今天小編就為大家分享一篇vue vue-Router默認(rèn)hash模式修改為history需要做的修改詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue淺析講解動態(tài)組件與緩存組件及異步組件的使用

    Vue淺析講解動態(tài)組件與緩存組件及異步組件的使用

    這篇文章主要介紹了Vue開發(fā)中的動態(tài)組件與緩存組件及異步組件的使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • Vue實現(xiàn)動態(tài)圓環(huán)百分比進度條

    Vue實現(xiàn)動態(tài)圓環(huán)百分比進度條

    這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)動態(tài)圓環(huán)百分比進度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用vue-i18n?入口文件配置控制臺報警問題解決

    使用vue-i18n?入口文件配置控制臺報警問題解決

    這篇文章主要介紹了使用vue-i18n?入口文件配置控制臺報警問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • treeSelect樹組件設(shè)置父節(jié)點禁用的方法實例

    treeSelect樹組件設(shè)置父節(jié)點禁用的方法實例

    這篇文章主要給大家介紹了關(guān)于treeSelect樹組件設(shè)置父節(jié)點禁用的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-12-12
  • vue3中<script?setup>?和?setup函數(shù)的區(qū)別對比

    vue3中<script?setup>?和?setup函數(shù)的區(qū)別對比

    這篇文章主要介紹了vue3中<script?setup>?和?setup函數(shù)的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 在Vue中使用Echarts實例圖的方法實例

    在Vue中使用Echarts實例圖的方法實例

    這篇文章主要給大家介紹了關(guān)于如何在Vue中使用Echarts實例圖的相關(guān)資料,文中介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • vue+axios 前端實現(xiàn)的常用攔截的代碼示例

    vue+axios 前端實現(xiàn)的常用攔截的代碼示例

    這篇文章主要介紹了vue+axios 前端實現(xiàn)的常用攔截的代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 關(guān)于vue路由監(jiān)聽事件跳轉(zhuǎn)的問題

    關(guān)于vue路由監(jiān)聽事件跳轉(zhuǎn)的問題

    這篇文章主要介紹了關(guān)于vue路由監(jiān)聽事件跳轉(zhuǎn)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue3中引用本地圖片路徑的方法詳解

    Vue3中引用本地圖片路徑的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue3中引用本地圖片路徑的常用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03

最新評論