vue拖拽組件

Vue 拖拽組件 vuedraggable 和 vue-dragging

一、描述

知道 vue 肯定是有組件存在的宦言,因此就直接搜了搜换薄,找了兩個(gè)不同的庫(kù)分別是:

兩個(gè)庫(kù)的里面不同藐唠,一個(gè)是直接進(jìn)行組件封裝,一個(gè)是進(jìn)行指令封裝爆土。

二椭懊、vuedraggable

vuedraggable 是標(biāo)準(zhǔn)的組件式封裝,并且將可拖動(dòng)元素放進(jìn)了 transition-group 上面步势,過(guò)渡動(dòng)畫(huà)都比較好氧猬。

使用方式:

yarn add vuedraggable

import vuedraggable from 'vuedraggable';

在使用的時(shí)候背犯,可以通過(guò) v-model 來(lái)雙向綁定本地 data,如果需要更新或者是觸發(fā)父組件監(jiān)聽(tīng)的事件盅抚,可以在 updated() 中去 emit漠魏。

引入后直接聲明該組件然后使用即可,示例代碼:

<template>
  <vuedraggable class="wrapper" v-model="list">
    <transition-group>
      <div v-for="item in list" :key="item" class="item">
        <p>{{item}}</p>
      </div>
    </transition-group>
  </vuedraggable>
</template>

<script>
import vuedraggable from 'vuedraggable';

export default {
  name: 'HelloWorld',
  components: {vuedraggable},
  props: {
  },
  data() {
    return {
      list: [1,2,34,4,54,5]
    }
  },
  updated() {
    console.log(this.list)
  },
  methods: {
  }
}
</script>
<style scoped>
.wrapper {
  display: flex;
  justify-content: center;
  width: 100%;
}
.item{
  width: 300px;
  height: 50px;
  background-color: #42b983;
  color: #ffffff;
}
</style>

實(shí)現(xiàn)的效果:

22.gif

官方的示例:

官方的示例 gif:

https://raw.githubusercontent.com/SortableJS/Vue.Draggable/master/example.gif

更多的事件及使用方法請(qǐng)參閱:

三妄均、Awe-dnd

vue-dragging 的 npm 包的名字是 awe-dnd柱锹,并不是 vue-dragging,這個(gè)庫(kù)的特點(diǎn)是封裝了 v-dragging 全局指令丛晦,然后通過(guò)全局指令去數(shù)據(jù)綁定等奕纫。

相比及 vuedraggable 來(lái)說(shuō), awe-dnd 是沒(méi)有雙向綁定(這里沒(méi)有雙向綁定并不是很嚴(yán)謹(jǐn)烫沙,準(zhǔn)確的來(lái)說(shuō)沒(méi)有暴露雙向綁定的方式)匹层,因此提供了事件,在拖拽結(jié)束的時(shí)候用來(lái)更新列表(不需要手動(dòng)更新列表锌蓄,其實(shí)內(nèi)部是實(shí)現(xiàn)了雙向綁定的)或者是去觸發(fā)父組件監(jiān)聽(tīng)的事件升筏。

安裝依賴:

npm install awe-dnd --save
yarn add awe-and

使用:

import VueDND from 'awe-dnd'

Vue.use(VueDND)
<!--your.vue-->
<script>
export default {
  data () {
    return {
        colors: [{
            text: "Aquamarine"
        }, {
            text: "Hotpink"
        }, {
            text: "Gold"
        }, {
            text: "Crimson"
        }, {
            text: "Blueviolet"
        }, {
            text: "Lightblue"
        }, {
            text: "Cornflowerblue"
        }, {
            text: "Skyblue"
        }, {
            text: "Burlywood"
        }]
    }
  },
  /* if your need multi drag
  mounted: function() {
      this.colors.forEach((item) => {
          Vue.set(item, 'isComb', false)
      })
  } */
}
</script>

<template>
  <div class="color-list">
      <div
          class="color-item"
          v-for="color in colors" v-dragging="{ item: color, list: colors, group: 'color' }"
          :key="color.text"
      >{{color.text}}</div>
  </div>
</template>

可以發(fā)現(xiàn)綁定的時(shí)候 v-dragging="{ item: color, list: colors, group: 'color' }" 這種形式進(jìn)行指令綁定,其中 item 就是單個(gè)對(duì)象瘸爽,而 list 則是數(shù)據(jù)列表您访,group 則是用來(lái)聲明一個(gè)組,來(lái)保證可以在一個(gè)頁(yè)面中進(jìn)行多個(gè)數(shù)據(jù)源的操作剪决。

而提供的兩個(gè)事件方法如下:

export default {
  mounted () {
    this.$dragging.$on('dragged', ({ value }) => {
      console.log(value.item)
      console.log(value.list)
      console.log(value.otherData)
    })
    this.$dragging.$on('dragend', (res) => {
        console.error(res);
    })
  }
}

一般使用的方法就是:

this.$dragging.$on('dragend', (res) => {
   console.error(res);
})

效果:

223.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灵汪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柑潦,更是在濱河造成了極大的恐慌享言,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渗鬼,死亡現(xiàn)場(chǎng)離奇詭異览露,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)譬胎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門差牛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人堰乔,你說(shuō)我怎么就攤上這事偏化。” “怎么了镐侯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵夹孔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搭伤,這世上最難降的妖魔是什么只怎? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮怜俐,結(jié)果婚禮上身堡,老公的妹妹穿的比我還像新娘。我一直安慰自己拍鲤,他們只是感情好贴谎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著季稳,像睡著了一般擅这。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上景鼠,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天仲翎,我揣著相機(jī)與錄音,去河邊找鬼铛漓。 笑死溯香,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的浓恶。 我是一名探鬼主播玫坛,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼包晰!你這毒婦竟也來(lái)了湿镀?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伐憾,失蹤者是張志新(化名)和其女友劉穎勉痴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體塞耕,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年嘴瓤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扫外。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廓脆,死狀恐怖筛谚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情停忿,我是刑警寧澤驾讲,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響吮铭,放射性物質(zhì)發(fā)生泄漏时迫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一谓晌、第九天 我趴在偏房一處隱蔽的房頂上張望掠拳。 院中可真熱鬧,春花似錦纸肉、人聲如沸溺欧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姐刁。三九已至,卻和暖如春烦味,著一層夾襖步出監(jiān)牢的瞬間聂使,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工拐叉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岩遗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓凤瘦,卻偏偏與公主長(zhǎng)得像宿礁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔬芥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354