国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

vue拖拽組件使用方法詳解

2019-11-19 12:26:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

pc端開(kāi)發(fā)需要拖拽組件完成列表的順序交換,一般移動(dòng)端的UI組件會(huì)包含,但是我在用的iview并沒(méi)有此功能的組件,于是手寫(xiě)一個(gè),實(shí)現(xiàn)起來(lái)很簡(jiǎn)單。效果圖如下:

可以拖拽完成新排序,點(diǎn)擊某一項(xiàng)可以觸發(fā)相關(guān)事件.

關(guān)于拖拽 drag & drop

拖放(Drag 和 drop)是 HTML5 標(biāo)準(zhǔn)的組成部分。

拖拽對(duì)象

dataTransfer對(duì)象,只能在拖放事件的事件處理程序中訪問(wèn)。重要屬性:

  • effectAllowed ( none | copy | copyLink | copyMove | link、linkMove | move | all | uninitialized ):設(shè)置或返回被拖動(dòng)元素允許發(fā)生的拖動(dòng)行為。
  • dropEffect( none | copy | link | move ):設(shè)置或返回拖放目標(biāo)上允許發(fā)生的拖放行為。如果此設(shè)置的拖放行為不在effectAllowed屬性設(shè)置的多種拖放行為之內(nèi),拖放操作將會(huì)失敗。
  • dataTransfer.getData(format):獲取DataTransfer對(duì)象中設(shè)置format格式的數(shù)據(jù)。其中format代表數(shù)據(jù)格式,data代表數(shù)據(jù)。

拖拽屬性

draggable 屬性規(guī)定元素是否可拖動(dòng)。

拖拽事件

  • ondragstart:在拖動(dòng)開(kāi)始時(shí)執(zhí)行,返回被拖動(dòng)元素。
  • ondragover:返回在何處放置被拖動(dòng)的數(shù)據(jù)
  • 默認(rèn)地,無(wú)法將數(shù)據(jù)/元素放置到其他元素中。如果需要設(shè)置允許放置,我們必須阻止對(duì)元素的默認(rèn)處理方式
  • ondragenter:在被拖動(dòng)的元素進(jìn)入到放置目標(biāo)時(shí)執(zhí)行
  • ondragleave:在被拖動(dòng)的元素離開(kāi)放置目標(biāo)時(shí)執(zhí)行
  • ondragend && ondrop:皆指鼠標(biāo)松開(kāi)被拖動(dòng)對(duì)象的事件,但是返回的分別為被拖動(dòng)對(duì)象和被拖動(dòng)元素懸掛的那個(gè)元素

源碼:

<template> <div class="transition-container">   <div class="item" v-for="(item, index) in items" :key="index"    draggable="true"    @dragstart="handleDragStart($event, item)"    @dragover.prevent="handleDragOver($event, item)"    @dragenter="handleDragEnter($event, item)"    @dragend="handleDragEnd($event, item)"     @click="chooseNav(item)"    >    <p class="trans-btn">     <span v-if="item.problemId">      <b class="id">        {{item.problemId}}      </b>       {{item.key}}     </span>     <span v-else>       {{item.key}}     </span>     <span>      <i-button v-if="btn" size="small" type="error" style="margin-right: 10px;" @click="deleteItem(item, index)">刪除</i-button>     </span>    </p>   </div> </div></template><script>import './index.less';export default {  name: 'transition',  props: {    dataSource: Array,    btn: Boolean,  },  data() {    return {      items: [],      dragging: null,    };  },  watch: {    dataSource(val) {      this.items = val;    },    dragging(val) {      if (this.dataSource.includes(val)) {        this.dragging = val;      } else {        this.dragging = null;      }    },  },  methods: {    handleDragStart(e, item) {      this.dragging = item;    },    handleDragEnd() {      this.dragging = null;      this.$emit('hasChanged', this.items);    },    // 首先把div變成可以放置的元素,即重寫(xiě)dragenter/dragover    handleDragOver(e) {      e.dataTransfer.dropEffect = 'move';// e.dataTransfer.dropEffect="move";//在dragenter中針對(duì)放置目標(biāo)來(lái)設(shè)置!    },    handleDragEnter(e, item) {      if (this.dragging) {        e.dataTransfer.effectAllowed = 'move';// 為需要移動(dòng)的元素設(shè)置dragstart事件        if (item === this.dragging) {          return;        }        const newItems = [...this.items];        console.log(newItems);        const src = newItems.indexOf(this.dragging);        const dst = newItems.indexOf(item);        newItems.splice(dst, 0, ...newItems.splice(src, 1));        this.items = newItems;      }    },    chooseNav(val) {      this.$emit('selectItem', val);    },    deleteItem(item, index) {      this.$emit('deleteItem', item, index);    },    editor(item, index) {      this.$emit('editorItem', item, index);    },  },};</script>

基本功能就完成啦

參考文章

W3school――HTML 5 拖放
div拖拽互換位置(vue)
如果簡(jiǎn)單的功能不能滿足,推薦這個(gè)寫(xiě)好的輪子

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛宁县| 互助| 兴城市| 普陀区| 禹州市| 甘孜| 双辽市| 榕江县| 烟台市| 达日县| 定边县| 罗山县| 东莞市| 达日县| 三穗县| 远安县| 平武县| 郁南县| 贵溪市| 东兰县| 永安市| 台北县| 东莞市| 皮山县| 临江市| 桂阳县| 石景山区| 金溪县| 若羌县| 开封县| 昭苏县| 昌邑市| 资中县| 内乡县| 余干县| 乳源| 保德县| 田东县| 三江| 东平县| 大渡口区|