【VUE】前端vuedraggable實(shí)現(xiàn)拖拽功能锻全,以及vuedraggable和awe-dnd區(qū)別

因?yàn)轳R上要做一個(gè)拖拽排序的功能绑谣,便先來(lái)了解下拖拽框架的使用细移,網(wǎng)上一搜就可以看到有vuedraggableawe-dnd。這兩個(gè)是一個(gè)東西且警,不同的是粉捻,兩個(gè)庫(kù)的里面不同,一個(gè)是直接進(jìn)行組件封裝振湾,一個(gè)是進(jìn)行指令封裝杀迹。

于是便同時(shí)安裝了兩個(gè)插件亡脸,看下區(qū)別


vuedraggable的使用

awe-dnd的使用

  • 從上圖可以看出來(lái)押搪,其實(shí)vuedraggable動(dòng)畫效果更好點(diǎn),再其次vuedraggable的文檔更多點(diǎn)浅碾,而且github上有一些用法的代碼

  • 這個(gè)兩個(gè)文檔都很少大州,一些用法要自己去找研究,不太友好垂谢,唯一慶幸的是vuedraggable有例子

一開始看文檔把代碼粘貼上去厦画,并沒有上圖的拖拽動(dòng)畫效果,后面看例子滥朱,才知道且將可拖動(dòng)元素放進(jìn)了 transition-group 下面才有過(guò)渡動(dòng)畫, awe-dnd也是一樣根暑。


指定點(diǎn)擊某塊才能拖拽
3.gif

設(shè)置handle就可以指定, 如果不想指定可以去掉,具體代碼如下

<template>
  <div class="container">
    <h3>Draggable</h3>

    <draggable tag="ul"
               :list="list"
               v-bind="dragOptions"
               class="list-group"
               handle=".handle"
               @start="drag = true"
               @end="drag = false">
      <transition-group type="transition"
                        :name="!drag ? 'flip-list' : null">
        <li class="list-group-item"
            v-for="(element, idx) in list"
            :key="element.name">
          <span class="handle">拖</span>
          <span class="text">{{ element.name }} </span>
          <span class="close"
                @click="removeAt(idx)">刪</span>
        </li>
      </transition-group>
    </draggable>

    <button class="btn btn-secondary button"
            @click="add">新增</button>
  </div>
</template>

<script>
import draggable from "vuedraggable";
export default {
  name: "draggable-template",
  components: {
    draggable
  },
  data () {
    return {
      list: [
        { name: "John0", text: "", id: 0 },
        { name: "Joao1", text: "", id: 1 },
        { name: "Jean2", text: "", id: 2 },
        { name: "Jean3", text: "", id: 3 },
        { name: "Jean4", text: "", id: 4 }
      ],
      drag: false
    };
  },
  computed: {
    dragOptions () {
      return {
        animation: 200, // 動(dòng)畫時(shí)間
        disabled: false, // false可拖拽徙邻,true不可拖拽
        group: "description",
        ghostClass: "ghost"
      };
    }
  },
  methods: {
    removeAt (idx) {
      this.list.splice(idx, 1);
    },
    add () {
      let i = this.list.length
      this.list.push({ name: "Juan " + i, id: i, text: "" });
    }
  }
};
</script>
<style lang="scss" scoped>
.flip-list-move {
  transition: transform 0.5s;
}
.no-move {
  transition: transform 0s;
}

.container {
  width: 100%;
  text-align: center;
  .handle {
    cursor: move;
  }
  .list-group {
    margin-bottom: 50px;
    .list-group-item {
      display: flex;
      justify-content: space-between;
      padding: 0 10px;
      border: 1px solid #ccc;
      height: 40px;
      line-height: 40px;
      width: 300px;
      text-align: center;
      color: #fff;
      background: rgba(0, 0, 0, 0.6);
    }
  }
}
</style>

awe-dnd 的示例如下

<template>
  <div class="color-list">
    <h3>Draggable</h3>

    <transition-group type="transition"
                      :name="!drag ? 'flip-list' : null">
      <div class="color-item"
           v-for="color in colors"
           v-dragging="{ item:color,list:colors }"
           :key="color.text">{{color.text}}</div>
    </transition-group>
  </div>
</template>

<script>
export default {
  data () {
    return {
      colors: [{
        text: "Aquamarine 1"
      }, {
        text: "Hotpink 2"
      }, {
        text: "Gold 3"
      }, {
        text: "Crimson 4"
      }, {
        text: "Blueviolet 5"
      }, {
        text: "Lightblue 6"
      }, {
        text: "Cornflowerblue 7"
      }, {
        text: "Skyblue 8"
      }, {
        text: "Burlywood 9"
      }]
    }
  },
  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);
    })
  }
}
</script>

<style lang="scss" scoped>
.flip-list-move {
  transition: transform 0.5s;
}
.no-move {
  transition: transform 0s;
}
.color-list {
  text-align: center;
  .color-item {
    cursor: move;
    border: 1px solid #ccc;
    height: 40px;
    line-height: 40px;
    width: 200px;
    text-align: center;
  }
}
</style>

再次更新2020/10/22

注意:
1.兩個(gè) draggable 節(jié)點(diǎn)中, group 的 name 是一樣的, 這樣就可以實(shí)現(xiàn)兩個(gè)區(qū)域的相互拖拽.

  1. draggable 節(jié)點(diǎn)中加上 :sort='false' 不能拖動(dòng)排序

3.draggable 節(jié)點(diǎn)中, group 添加 put: false, 不能從另一個(gè)數(shù)組中拖回來(lái)

  1. 點(diǎn)擊刪除后, 按原順序回到原數(shù)組中排嫌,, 從 collections 數(shù)組中刪除, 通過(guò)計(jì)算屬性 notCollectedMenus
    來(lái)添加到下面的區(qū)域.
<draggable
      :group='{name: "menu", put: true}'
     :sort='false'
     :value="collections"
      ...>
     ...
    </draggable>
...
computed: {
  notCollectedMenus: function () {
    return this.list2.filter(item=> {
      let obj = this.list1.find(ele=> ele.id === item.id)
      return obj == undefined ? true : false
    })
  },
},
...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缰犁,隨后出現(xiàn)的幾起案子淳地,更是在濱河造成了極大的恐慌怖糊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颇象,死亡現(xiàn)場(chǎng)離奇詭異伍伤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)遣钳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門扰魂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人耍贾,你說(shuō)我怎么就攤上這事阅爽。” “怎么了荐开?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵付翁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我晃听,道長(zhǎng)百侧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任能扒,我火速辦了婚禮佣渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己扎附,他們只是感情好濒生,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砂竖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鹃答。 梳的紋絲不亂的頭發(fā)上乎澄,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音测摔,去河邊找鬼置济。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锋八,可吹牛的內(nèi)容都是我干的浙于。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挟纱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼羞酗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起樊销,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤整慎,失蹤者是張志新(化名)和其女友劉穎脏款,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裤园,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撤师,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拧揽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剃盾。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淤袜,靈堂內(nèi)的尸體忽然破棺而出痒谴,到底是詐尸還是另有隱情,我是刑警寧澤铡羡,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布积蔚,位于F島的核電站,受9級(jí)特大地震影響烦周,放射性物質(zhì)發(fā)生泄漏尽爆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一读慎、第九天 我趴在偏房一處隱蔽的房頂上張望漱贱。 院中可真熱鬧,春花似錦夭委、人聲如沸幅狮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)崇摄。三九已至,卻和暖如春蚂且,著一層夾襖步出監(jiān)牢的瞬間配猫,已是汗流浹背幅恋。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工杏死, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捆交。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓淑翼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親品追。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玄括,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一.Redis緩存雪崩 Redis緩存雪崩和穿透乍一看好像差不多,概念容易混淆.緩存雪崩是指在我們?cè)O(shè)置緩存失效時(shí)間...
    他是人間惆悵客閱讀 6,983評(píng)論 5 97
  • 故鄉(xiāng)的桃花開了船殉,可風(fēng)還在吹。想起了奶奶煮的蘿卜絲煮紅豆????
    AmitabuddhaBLES閱讀 158評(píng)論 0 0
  • 今天晚上我預(yù)習(xí)了以文課堂課本斯嚎, 我知道了利虫,口語(yǔ)交際。本次交際的話題是說(shuō)話的語(yǔ)氣堡僻,說(shuō)話的時(shí)候使用恰當(dāng)?shù)恼Z(yǔ)氣能讓聽的人...
    軒小豆閱讀 285評(píng)論 0 0
  • 文丨文靜 前些日子糠惫,怕孩子催我給自己買手機(jī),我試探著說(shuō)钉疫,“耗子硼讽,你這次期中考試的名次,雖然達(dá)到了我們的要求牲阁。但是理郑,...
    張文靜_浩媽閱讀 391評(píng)論 8 3