vue element el-transfer adds drag function

vue element el-transfer adds drag function

The Core Asset Management Project requires el-transfer to add drag-and-drop sorting and drag-and-drop functions to the left, right, up, and down sides;
The original component does not support dragging, so we need to use a third-party component sortablejs

First install

 sudo npm i sortablejs --save-dev

HTML code

  <template>
  <el-transfer ref="transfer" id="transfer" v-model="value" :data="data">
   <span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
  </el-transfer>
</template>```

create

  <script>

   import Sortable from 'sortablejs'

   export default {
      data() {
        const generateData = _ => {
          const data = []; for (let i = 1; i <= 15; i++) {
            data.push({
              key: i,
              label: `option ${i}`,
              disabled: i % 4 === 0 });
          } return data;
        }; return {
          data: generateData(),
          value: [1, 4],
          draggingKey : null }
      },
      mounted() {
        const transfer = this.$refs.transfer.$el
        const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
        const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
        const rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(rightEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.value[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            }//Solve the problem of undefined when dragging the last item on the right from the right to the left this.$set(this.value,oldIndex,this.value[newIndex])  
            this.$set(this.value,newIndex,temp)
          }
        })
        const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(leftEl,{
          onEnd: (evt) => {
            const {oldIndex,newIndex} = evt;
            const temp = this.data[oldIndex] 
            if (!temp || temp === 'undefined') {
              return
            } //Solve the problem of undefined when dragging the last item on the right from the right to the left this.$set(this.data,oldIndex,this.data[newIndex]) 
            this.$set(this.data,newIndex,temp)
          }
        })
        leftPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        leftPanel.ondrop = (ev) => {
          ev.preventDefault();
          const index = this.value.indexOf(this.draggingKey) if(index !== -1){ this.value.splice(index,1)
          }
        }
        rightPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        rightPanel.ondrop = (ev) => {
          ev.preventDefault(); if(this.value.indexOf(this.draggingKey) === -1){ this.value.push(this.draggingKey)
          }
        }
      },
      methods: {
        drag(ev,option) { this.draggingKey = option.key
        }
      }

    } 
</script>

This is the end of this article about adding drag-and-drop function to vue element el-transfer. For more related element el-transfer drag-and-drop content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Vue+abp WeChat scan code login implementation code example
  • How to encapsulate the table component of Vue Element
  • Example code for implementing dynamic column filtering in vue+element table
  • Sharing tips on using vue element and nuxt
  • Implementation of vue+elementui universal pop-up window (add+edit)
  • Vue+element UI realizes tree table
  • Vue+elementUI dynamically adds form items and adds verification code details
  • Vue uses element-ui to implement form validation
  • Vue Element front-end application development integrates ABP framework front-end login

<<:  About uniApp editor WeChat sliding problem

>>:  React-native sample code to implement the shopping cart sliding deletion effect

Recommend

Detailed explanation of the workbench example in mysql

MySQL Workbench - Modeling and design tool 1. Mod...

Control the light switch with js

Use js to control the light switch for your refer...

MySQL query syntax summary

Preface: This article mainly introduces the query...

CentOS7 64-bit installation mysql graphic tutorial

Prerequisites for installing MySQL: Install CentO...

The concrete implementation of JavaScript exclusive thinking

In the previous blog, Xiao Xiong updated the meth...

How many pixels should a web page be designed in?

Many web designers are confused about the width of...

Solve the pitfall of storing boolean type values ​​in localstorage

LocalStorage stores Boolean values Today, when I ...

Summary of various forms of applying CSS styles in web pages

1. Inline style, placed in <body></body&g...

JS realizes the case of eliminating stars

This article example shares the specific code of ...

html base url tag

Its function is to set a global style. Then your s...

Using HTML web page examples to explain the meaning of the head area code

Use examples to familiarize yourself with the mean...

Implementation code of using select to select elements in Vue+Openlayer

Effect picture: Implementation code: <template...

How to use LibreOffice to convert document formats under CentOS

Project requirements require some preprocessing o...