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

Vue?基于?vuedraggable?實(shí)現(xiàn)選中、拖拽、排序效果

 更新時(shí)間:2022年05月21日 10:34:59   作者:linong  
這篇文章主要介紹了Vue?基于?vuedraggable?實(shí)現(xiàn)選中、拖拽、排序效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

今天有個(gè)朋友說要做個(gè)效果:Vue實(shí)現(xiàn)拖拽排序,要有 checked,輸出結(jié)果是排序后的,要全選,未選中的不能拖動(dòng)。

其實(shí)我之前基于 Sortable 做過一個(gè)類似的效果。也給他看過了,沒看太明白,他就自己基于 vuedraggable 實(shí)現(xiàn)了一下。

正好有點(diǎn)問題給他解決了一下。廢話不多說,先上最終效果:Vue 拖拽排序效果 測試地址。下面就是最終效果圖。

效果一:實(shí)現(xiàn)選中 和 全選效果

就下面這樣,elementUI 官方 Demo。很簡單毫無挑戰(zhàn)呀。

<el-checkbox
 :indeterminate="isIndeterminate"
 v-model="checkAll"
 @change="handleCheckAllChange"
 >全部</el-checkbox
>
<el-checkbox-group
 v-model="checkedCities"
 @change="handleCheckedCitiesChange"
>
 <el-checkbox :class="{'item': checkedCities.find(v=>v==city)}" v-for="city in cities" :label="city" :key="city">{{ city }}</el-checkbox>
</el-checkbox-group>

效果二:實(shí)現(xiàn)拖拽效果

拖拽效果基于 vuedraggable 實(shí)現(xiàn)。

問題

這里我憑借我的資深經(jīng)(踩)驗(yàn)(坑),先提出幾個(gè)可能存在的問題。

  • <el-checkbox-group v-model="checkedCities"> 實(shí)現(xiàn)的效果只是記錄選中的項(xiàng),無排序
  • vue 和 jQuery 做起來最大的區(qū)別是什么?基于如下描述,會(huì)出現(xiàn)視圖顯示和數(shù)據(jù)對不上。

vue 通過數(shù)據(jù)驅(qū)動(dòng)視圖,也可以理解為數(shù)據(jù)改變,視圖自動(dòng)改變。

jQuery 通過改變直接視圖先反饋數(shù)據(jù)。

基于上面兩點(diǎn),就可以看到基本上操作 DOM 的庫,Vue 在使用的時(shí)候都有問題。

因?yàn)樗麄冎徊僮髁?DOM,而 Vue 需要是的你修改數(shù)據(jù)。

解決方案 & 代碼

<el-checkbox-group v-model="checkedCities"> 的問題比較好解決。我們在數(shù)據(jù)的時(shí)候根據(jù)數(shù)據(jù)源排序一把就 ok。

因?yàn)閱栴}是庫只修改 DOM,未修改數(shù)據(jù),那么我們可以考慮監(jiān)聽他的回調(diào)事件,然后手動(dòng)的去修改數(shù)據(jù)(Sortable 我就這樣做的)。
Vue.Draggable 的封裝還是有點(diǎn)東西的,他提供了 :list="cities" 讓你傳入數(shù)據(jù)源,然后操作的時(shí)候替你修改數(shù)據(jù)。

<el-checkbox
 :indeterminate="isIndeterminate"
 v-model="checkAll"
 @change="handleCheckAllChange"
>全部</el-checkbox>
<el-checkbox-group
 v-model="checkedCities"
 @change="handleCheckedCitiesChange">
 <draggable draggable=".item" :list="cities">
 <el-checkbox :class="{'item': checkedCities.find(v=>v==city)}" v-for="city in cities" :label="city" :key="city">{{ city }}</el-checkbox>
 </draggable>
</el-checkbox-group>

效果三:只有選中的才能拖拽

上面我們已經(jīng)實(shí)現(xiàn)了拖拽。但是未選中也能拖拽排序就感覺怪怪的。
這里有兩個(gè)做法

  • 我是記得有提供這樣的功能,找了找文檔果然有 draggable=".item" ,指定可拖拽元素的 class。
  • 但是它這個(gè)效果很詭異,未選中的的確不能拖動(dòng)了,但是你也不能拖動(dòng)已選中的占據(jù)他的位置。
  • 所以我又加了個(gè)處理。我對數(shù)據(jù)源做了排序,這樣選中和未選中就分堆了。
  • 接下來說第二種方案。那就是在他提供的鉤子函數(shù)上去自己判斷當(dāng)前 DOM 該不該執(zhí)行拖拽。

Vue 的庫在使用中要注意操作元數(shù)據(jù),而不是只修改 DOM。

ps:下面在看下vue + vuedraggable 實(shí)現(xiàn)拖拽排序

安裝

npm install vuedraggable

引入

import draggable from 'vuedraggable'

注冊

components: {
 draggable
}

html

<draggable
 class="list"
 v-model="modules"
 :clone="clone"
 :options="{
 group: {
  name: 'layout',
  pull: 'clone',
  put: false
 },
 draggable: '.item',
 forceFallback: true,
 sort: false,
 animation: 50
 }">
 <transition-group tag="ul">
 <li
  v-for="(item, index) in modules"
  :key="index"
  class="item">
  <div class="holder">
  <img :src="item.icon" />
  <h3>{{item.text}}</h3>
  </div>
 </li>
 </transition-group>
</draggable>

相關(guān)文檔

官方地址:https://sortablejs.github.io/Vue.Draggable/#/simple

Github:https://github.com/SortableJS/Vue.Draggable

Demo:https://david-desmaisons.github.io/draggable-example/

到此這篇關(guān)于Vue 基于 vuedraggable 實(shí)現(xiàn)選中、拖拽、排序效果的文章就介紹到這了,更多相關(guān)vue vuedraggable實(shí)現(xiàn)選中、拖拽、排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js實(shí)現(xiàn)日歷功能

    Vue.js實(shí)現(xiàn)日歷功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)日歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Vue3中使用fetch實(shí)現(xiàn)數(shù)據(jù)請求的過程詳解

    Vue3中使用fetch實(shí)現(xiàn)數(shù)據(jù)請求的過程詳解

    在現(xiàn)代前端開發(fā)中,數(shù)據(jù)請求是一個(gè)不可或缺的環(huán)節(jié),而在Vue3中,我們有許多方法可以進(jìn)行數(shù)據(jù)請求,其中使用fetch方法是一個(gè)非常常見的選擇,本文將詳細(xì)講解如何在Vue3中使用fetch來實(shí)現(xiàn)數(shù)據(jù)請求,需要的朋友可以參考下
    2024-09-09
  • Vue動(dòng)態(tài)改變css樣式的3種方法總結(jié)

    Vue動(dòng)態(tài)改變css樣式的3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue動(dòng)態(tài)改變css樣式的3種方法,在Vue.js中我們經(jīng)常需要根據(jù)特定的條件或事件來動(dòng)態(tài)地修改CSS樣式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 手動(dòng)掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法

    手動(dòng)掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法

    在VUE應(yīng)用中,經(jīng)常會(huì)使用一些非vue實(shí)現(xiàn)的js庫,這些js庫可能要求外部傳入一些界面DOM節(jié)點(diǎn),本文主要介紹了手動(dòng)掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法,感興趣的可以了解一下
    2024-08-08
  • vue移動(dòng)端實(shí)現(xiàn)下拉刷新

    vue移動(dòng)端實(shí)現(xiàn)下拉刷新

    我們通過原理講解以及代碼實(shí)例給大家分享了關(guān)于VUE實(shí)現(xiàn)移動(dòng)下拉刷新的功能,有的朋友可以跟著學(xué)習(xí)下。
    2018-04-04
  • Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷

    Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷

    這篇文章主要給大家介紹了關(guān)于Vue自定義v-has指令實(shí)現(xiàn)按鈕權(quán)限判斷的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • vue.js中created方法作用

    vue.js中created方法作用

    這篇文章主要介紹了vue.js中created方法作用及mounted和created的區(qū)別介紹,需要的朋友可以參考下
    2018-03-03
  • 使用Bootstrap4 + Vue2實(shí)現(xiàn)分頁查詢的示例代碼

    使用Bootstrap4 + Vue2實(shí)現(xiàn)分頁查詢的示例代碼

    本篇文章主要介紹了使用Bootstrap4 + Vue2實(shí)現(xiàn)分頁查詢的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 教你輕松解決Vue?Dialog彈窗詬病

    教你輕松解決Vue?Dialog彈窗詬病

    彈窗經(jīng)常被使用在一些表單的增刪改查啊,或者彈出一些提示信息等等,這篇文章主要給大家介紹了關(guān)于Vue?Dialog彈窗詬病解決的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • vue.js的computed,filter,get,set的用法及區(qū)別詳解

    vue.js的computed,filter,get,set的用法及區(qū)別詳解

    下面小編就為大家分享一篇vue.js的computed,filter,get,set的用法及區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論

县级市| 敖汉旗| 乃东县| 合阳县| 安阳县| 偃师市| 溆浦县| 镇远县| 长沙县| 黄冈市| 崇明县| 阿克苏市| 甘肃省| 喜德县| 色达县| 虎林市| 青河县| 南雄市| 馆陶县| 汶川县| 徐水县| 长葛市| 台南市| 九江市| 革吉县| 洛川县| 盐山县| 长岛县| 华亭县| 滨海县| 积石山| 太仓市| 会东县| 霍邱县| 商河县| 内黄县| 怀仁县| 乌鲁木齐县| 项城市| 南宫市| 色达县|