vue 试卷拖动题号改变顺序

2020-09-17  本文已影响0人  青灯无味

一、template模版
`

<div id="number_box" class="number-box">
        <span
            v-for="ques in item.viewQuestionGroupDTOS"
            :key="ques.questionId"
            draggable="true"
            @dragstart="handleDragStart($event, ques, item)"
            @dragover.prevent="handleDragOver($event, ques,item)"
            @dragenter="handleDragEnter($event, ques,item)"
            @dragend="handleDragEnd($event, ques,item)"
          >{{ques.questionSort}}</span>
  </div>`

二、js部分 拖拽
`

handleDragStart(e, item, father) {
  this.dragging = item
  console.log('handleDragStart')
},
handleDragEnd(e, item, father) {
  this.dragging = null
  //this.$emit("changeSort");
  this.$emit('changeSort', this.deepCopy(this.paperData))

  console.log('end')
},
//首先把div变成可以放置的元素,即重写dragenter/dragover
handleDragOver(e) {
  e.dataTransfer.dropEffect = 'move' // e.dataTransfer.dropEffect="move";//在dragenter中针对放置目标来设置!
  console.log('handleDragOver')
},
handleDragEnter(e, item, father) {
  e.dataTransfer.effectAllowed = 'move' //为需要移动的元素设置dragstart事件
  if (item === this.dragging) {
    return
  }
  if (father) {
    // 拖到小题
    const newItems = [...father.viewQuestionGroupDTOS]
    console.log(newItems)
    const src = newItems.indexOf(this.dragging)
    const dst = newItems.indexOf(item)
    newItems.splice(dst, 0, ...newItems.splice(src, 1))
    father.viewQuestionGroupDTOS = newItems
  } else {
    // 拖到大题
    const newItems = [...this.paperData.viewPaperGroupDTOS]
    console.log(newItems)
    const src = newItems.indexOf(this.dragging)
    const dst = newItems.indexOf(item)
    newItems.splice(dst, 0, ...newItems.splice(src, 1))
    this.paperData.viewPaperGroupDTOS = newItems
  }
  console.log('handleDragEnter')
},

`

上一篇下一篇

猜你喜欢

热点阅读