最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue實(shí)現(xiàn)拖拽改變列表順序詳解

 更新時(shí)間:2024年04月20日 10:19:15   作者:MerkleJqueryRu  
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)拖拽改變列表順序的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

當(dāng)我們構(gòu)建前端應(yīng)用時(shí),有時(shí)需要實(shí)現(xiàn)一些交互性強(qiáng)的功能,比如拖拽改變列表順序。在本文中,我將演示如何使用 Vue.js 實(shí)現(xiàn)這樣一個(gè)功能。

首先,我們需要一個(gè)基本的 Vue 組件結(jié)構(gòu),包括 HTML 模板、JavaScript 邏輯和 CSS 樣式。我們將在 Vue 組件中實(shí)現(xiàn)拖拽改變列表順序的功能。

<template>
  <div ref="list" 
    :ondragstart="dragstart"
    :ondragenter="dragenter"
    :ondragend="dragend"
    class="list">
    <div draggable="true" class="item" v-for="i in 10">{{ i }}</div>
  </div>
</template>

<script setup>
import { ref } from 'vue'

// 被拖拽的父元素
const list = ref(null)
// 當(dāng)前被拖拽的元素
const sourceNode = ref(null)

// 拖拽開(kāi)始事件
const dragstart = (e) => {
  setTimeout(() => {
    // 需要異步 不然元素直接消失
    sourceNode.value = e.target
    e.target.classList.add('moving')
  }, 0)
}

const dragenter = (e) => {
  // 阻止瀏覽器默認(rèn)行為,否則放手時(shí)會(huì)回到原位
  e.preventDefault()
  if(e.target === list.value || e.target === sourceNode.value) {
    // 如果是在父元素上,或在自身元素上,不做任何處理
    return;
  }
  const children = [... list.value.children]
  const sourceIndex = children.indexOf(sourceNode.value)
  const targetIndex = children.indexOf(e.target)
  // 插入到對(duì)應(yīng)位置
  if(sourceIndex < targetIndex) {
    list.value.insertBefore(sourceNode.value, e.target.nextElementSilbling)
  }else {
    list.value.insertBefore(sourceNode.value, e.target)    
  }
}

const dragend = (e) => {
  e.target.classList.remove('moving')
}
</script>

<style scoped>
.box {
  height: 80vw;
}
.item {
  height: 40px;
  background-color: antiquewhite;
  margin: 10px;
  cursor: pointer;
}

.item.moving {
  background: #ccc;
  color: transparent;
  border: 1px dashed #ccc;
}
</style>

以上是完整的代碼?,F(xiàn)在讓我們逐步解釋這段代碼是如何工作的。

  • <template> 部分包含了我們的 HTML 結(jié)構(gòu)。我們有一個(gè)包含一些可拖拽元素的容器,每個(gè)元素都有一個(gè)拖拽事件。
  • <script setup> 部分是 Vue.js 3 的新特性,用于編寫組件的邏輯。在這里,我們引入了 ref 函數(shù),用來(lái)創(chuàng)建響應(yīng)式數(shù)據(jù)。我們創(chuàng)建了兩個(gè) ref,一個(gè)用于跟蹤被拖拽的父元素,另一個(gè)用于跟蹤當(dāng)前被拖拽的元素。然后我們定義了三個(gè)函數(shù),分別處理拖拽開(kāi)始、拖拽進(jìn)入和拖拽結(jié)束事件。
  • dragstart 函數(shù)中,我們?cè)O(shè)置了一個(gè)異步定時(shí)器,以確保獲取到正確的被拖拽元素。然后我們給被拖拽的元素添加一個(gè) moving 類,用于在拖拽時(shí)改變其樣式。
  • dragenter 函數(shù)處理拖拽進(jìn)入事件。我們首先阻止了瀏覽器的默認(rèn)行為,然后判斷當(dāng)前拖拽的目標(biāo)元素是否是列表容器本身或者是拖拽元素本身,如果是則不進(jìn)行任何處理。接著,我們獲取了列表容器中所有子元素,并計(jì)算出被拖拽元素和目標(biāo)元素的索引,然后根據(jù)這些索引將被拖拽元素插入到正確的位置。
  • dragend 函數(shù)在拖拽結(jié)束時(shí)移除了被拖拽元素的 moving 類,恢復(fù)其原始樣式。
  • 最后,<style scoped> 部分包含了組件的 CSS 樣式,包括列表容器和拖拽元素的樣式定義。

到此這篇關(guān)于Vue實(shí)現(xiàn)拖拽改變列表順序詳解的文章就介紹到這了,更多相關(guān)Vue拖拽改變列表順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue使用Element組件時(shí)v-for循環(huán)里的表單項(xiàng)驗(yàn)證方法

    vue使用Element組件時(shí)v-for循環(huán)里的表單項(xiàng)驗(yàn)證方法

    這篇文章主要介紹了vue使用Element組件時(shí)v-for循環(huán)里的表單項(xiàng)驗(yàn)證方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 詳解基于vue-cli配置移動(dòng)端自適應(yīng)

    詳解基于vue-cli配置移動(dòng)端自適應(yīng)

    本篇文章主要介紹了詳解基于vue-cli配置移動(dòng)端自適應(yīng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Vue3如何自定義v-permission權(quán)限指令

    Vue3如何自定義v-permission權(quán)限指令

    這篇文章主要為大家詳細(xì)介紹了Vue3如何編寫一個(gè)?v-permission?指令來(lái)根據(jù)用戶權(quán)限動(dòng)態(tài)控制元素的渲染,感興趣的小伙伴可以參考一下
    2024-12-12
  • vue自定義表單生成器form-create使用詳解

    vue自定義表單生成器form-create使用詳解

    這篇文章主要介紹了vue自定義表單生成器,可根據(jù)json參數(shù)動(dòng)態(tài)生成表單,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue.js使用v-model指令實(shí)現(xiàn)的數(shù)據(jù)雙向綁定功能示例

    vue.js使用v-model指令實(shí)現(xiàn)的數(shù)據(jù)雙向綁定功能示例

    這篇文章主要介紹了vue.js使用v-model指令實(shí)現(xiàn)的數(shù)據(jù)雙向綁定功能,簡(jiǎn)單分析了v-model指令的功能并結(jié)合實(shí)例形式給出了v-model指令實(shí)現(xiàn)數(shù)據(jù)雙向綁定相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Vue 2.0學(xué)習(xí)筆記之使用$refs訪問(wèn)Vue中的DOM

    Vue 2.0學(xué)習(xí)筆記之使用$refs訪問(wèn)Vue中的DOM

    這篇文章主要介紹了Vue 2.0學(xué)習(xí)筆記之使用$refs訪問(wèn)Vue中的DOM,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Vue數(shù)組的劫持逐步分析講解

    Vue數(shù)組的劫持逐步分析講解

    小編這次要給大家分享的是如何實(shí)現(xiàn)vue2.x數(shù)組劫持,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲
    2023-01-01
  • Vue使用視頻作為網(wǎng)頁(yè)背景的實(shí)現(xiàn)指南

    Vue使用視頻作為網(wǎng)頁(yè)背景的實(shí)現(xiàn)指南

    在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中,視頻背景逐漸成為一種流行的設(shè)計(jì)趨勢(shì),它不僅能夠提升網(wǎng)頁(yè)的動(dòng)態(tài)效果,還可以在視覺(jué)上抓住用戶的注意力,本文將詳細(xì)講解如何在頁(yè)面中使用視頻作為背景,并確保內(nèi)容可見(jiàn)、頁(yè)面元素布局合理,需要的朋友可以參考下
    2024-10-10
  • 詳解Vue的監(jiān)聽(tīng)屬性

    詳解Vue的監(jiān)聽(tīng)屬性

    這篇文章主要為大家介紹了Vue的監(jiān)聽(tīng)屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • vue在使用element組件出現(xiàn)<el-input>標(biāo)簽無(wú)法輸入的問(wèn)題

    vue在使用element組件出現(xiàn)<el-input>標(biāo)簽無(wú)法輸入的問(wèn)題

    這篇文章主要介紹了vue在使用element組件出現(xiàn)<el-input>標(biāo)簽無(wú)法輸入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

天水市| 克什克腾旗| 顺昌县| 姜堰市| 岳阳市| 河源市| 惠东县| 漳平市| 邵东县| 康定县| 咸宁市| 来安县| 汽车| 拉孜县| 潮安县| 秭归县| 长岭县| 汽车| 万州区| 嘉祥县| 灵丘县| 都江堰市| 东阿县| 苗栗市| 荔波县| 象山县| 容城县| 扎赉特旗| 曲靖市| 赤峰市| 平南县| 蓬莱市| 时尚| 拜泉县| 兴业县| 广河县| 安庆市| 沐川县| 通化市| 灵宝市| 阿拉善左旗|