国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Vue 基于 vuedraggable 實現選中、拖拽、排序效果

瀏覽:2日期:2023-01-20 14:52:45

今天有個朋友說要做個效果:Vue實現拖拽排序,要有 checked,輸出結果是排序后的,要全選,未選中的不能拖動。

其實我之前基于 Sortable 做過一個類似的效果。也給他看過了,沒看太明白,他就自己基于 vuedraggable 實現了一下。

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

Vue 基于 vuedraggable 實現選中、拖拽、排序效果

效果一:實現選中 和 全選效果

就下面這樣,elementUI 官方 Demo。很簡單毫無挑戰呀。

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

效果二:實現拖拽效果

拖拽效果基于 vuedraggable 實現。

問題

這里我憑借我的資深經(踩)驗(坑),先提出幾個可能存在的問題。

<el-checkbox-group v-model='checkedCities'> 實現的效果只是記錄選中的項,無排序 vue 和 jQuery 做起來最大的區別是什么?基于如下描述,會出現視圖顯示和數據對不上。

vue 通過數據驅動視圖,也可以理解為數據改變,視圖自動改變。

jQuery 通過改變直接視圖先反饋數據。

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

因為他們只操作了 DOM,而 Vue 需要是的你修改數據。

解決方案 & 代碼

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

因為問題是庫只修改 DOM,未修改數據,那么我們可以考慮監聽他的回調事件,然后手動的去修改數據(Sortable 我就這樣做的)。Vue.Draggable 的封裝還是有點東西的,他提供了 :list='cities' 讓你傳入數據源,然后操作的時候替你修改數據。

<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 : v-for='city in cities' :label='city' :key='city'>{{ city }}</el-checkbox> </draggable></el-checkbox-group>

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

上面我們已經實現了拖拽。但是未選中也能拖拽排序就感覺怪怪的。這里有兩個做法

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

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

ps:下面在看下vue + vuedraggable 實現拖拽排序

安裝

npm install vuedraggable

引入

import draggable from ’vuedraggable’

注冊

components: { draggable}

html

<draggable 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='http://www.cgvv.com.cn/bcjs/item.icon' /> <h3>{{item.text}}</h3> </div> </li> </transition-group></draggable>

相關文檔

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

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

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

到此這篇關于Vue 基于 vuedraggable 實現選中、拖拽、排序效果的文章就介紹到這了,更多相關vue vuedraggable實現選中、拖拽、排序內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 亚洲一区二区三区高清 | 亚洲一区二区三区精品影院 | 91日本在线观看亚洲精品 | 999成人国产精品 | 亚洲免费视频观看 | 日本久久久久久久 | 国产香港特级一级毛片 | 久久国产乱子伦精品免费不卡 | 日韩免费一级毛片 | 一本久久a久久精品亚洲 | 精品国产三级 | rion美乳弹出来四虎在线观看 | 那里有黄色网址 | 欧美性猛交xxxxx按摩国内 | 久久综合综合久久 | 亚洲加勒比久久88色综合 | 免费特黄一级欧美大片在线看 | 国内一级野外a一级毛片 | 一级毛片免费观看不卡的 | 国内精品久久久久久久星辰影视 | 国产精品一区二区丝瓜 | 欧美性极品hd高清视频 | 亚洲精品一区二区三区四区 | 婷婷在线成人免费观看搜索 | 欧美成人精品一区二区 | 视频一区二区在线 | 国产精品久久久久影院色老大 | 亚洲影院在线 | 99视频在线精品 | 国产精品午夜波多野结衣性色 | 国产乱子精品免费视观看片 | 中文三 级 黄 色 片 | 免费国产视频在线观看 | 中国老妇另类xxxx | 最新国产午夜精品视频不卡 | 日本欧美一区二区三区片 | 秘书高跟黑色丝袜国产91在线 | 日本综合久久 | 久久污 | 婷婷尹人香蕉久久天堂 | 欧美精品色精品一区二区三区 |