国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

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

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

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

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

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

<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>

效果二:實(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ù)對(duì)不上。

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'> 的問題比較好解決。我們?cè)跀?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 : 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è)處理。我對(duì)數(shù)據(jù)源做了排序,這樣選中和未選中就分堆了。 接下來說第二種方案。那就是在他提供的鉤子函數(shù)上去自己判斷當(dāng)前 DOM 該不該執(zhí)行拖拽。

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

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

安裝

npm install vuedraggable

引入

import draggable from ’vuedraggable’

注冊(cè)

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.intensediesel.com/bcjs/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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 沁源县| 山丹县| 仁化县| 宁明县| 临澧县| 宜春市| 田阳县| 西藏| 甘孜县| 方山县| 博罗县| 钦州市| 峡江县| 聊城市| 汉中市| 鄂伦春自治旗| 靖安县| 永和县| 长垣县| 北海市| 都匀市| 商水县| 宝清县| 深圳市| 博客| 香港 | 慈利县| 永嘉县| 鄯善县| 新乡市| 婺源县| 南和县| 乌海市| 淮南市| 泰兴市| 吴堡县| 景德镇市| 重庆市| 红原县| 贵港市| 枣阳市|