当前位置: 代码网 > it编程>前端脚本>Vue.js > vue使用vuedraggable插件实现拖拽效果

vue使用vuedraggable插件实现拖拽效果

2024年05月15日 Vue.js 我要评论
技术:ant design vue1.7.8 的ui框架、vue2.x版本场景:需要实现div拖拽的效果效果图:第一步:安装vuedraggable插件//npm方式安装npm i -s vuedra

技术
ant design vue1.7.8 的ui框架、
vue2.x版本

场景:需要实现div拖拽的效果

效果图:

第一步:安装vuedraggable插件

//npm方式安装
npm i -s vuedraggable
//或使用yarn安装
yarn add vuedraggable

第二步:在页面引入组件 script代码块里

<script>
//第一步 ***.引入组件
import draggable from 'vuedraggable'
export default {
  components: {
    draggable, //***.第二步 
  },
  data() {
    return {
      tagslist: [],
      treeclass: '',
      classlist: [],
      checkedcategorykeys: [],
      categorytree: [],
      defaultprops: {
        children: 'subgrouplist',
        title: 'groupname',
        key: 'groupcode',
      },
      eventselectednode: null,
      isloading: false,
    }
  },
  created() {
    this.load_init()
  },
  methods: {
    //拖拽动作   ***.第三步 拖拽完成事件
    ondraggableupdate(e) {
      this.isloading = true
      settimeout(() => {
        this.isloading = false
        //老位置
        const oldindex = e.oldindex
        //新位置
        const newindex = e.newindex
        const newsort = this.tagslist[e.newindex].sort
        this.tagslist[e.newindex].sort = this.tagslist[e.oldindex].sort
        this.tagslist[e.oldindex].sort = newsort
        console.log(this.tagslist)
        this.$message.success('顺序变更成功!')
      }, 1000)
    },
    //初始化
    load_init() {
      for (let index = 0; index < 98; index++) {
        this.classlist.push({
          value: 'val' + index,
          label: '树层级_' + index,
        })
        this.tagslist.push({
          value: 'val' + index,
          label: '树层级_' + index,
          //是否编辑
          iseditname: false,
          //排序
          sort: index,
          //loading
          isloading: false,
        })
      }
    },
  },
}
</script>

template代码块

      <div class="bodyright">
        <div class="bodyrighttitle">
          <div><span>标签池</span></div>
          <div><a-button type="primary">导入excel</a-button></div>
        </div>
        <div class="bodyrightlabel">
          <a-spin :spinning="isloading">
          <!-- ***.下面是第四步 -->
            <draggable
              v-model="tagslist"
              class="bodyrightdraggable"
              @sort="ondraggableupdate"
              animation="300"
              chosenclass="chosen"
            >
              <transition-group v-for="item in tagslist" :key="item.value">
                <a-tag
                  class="tabs"
                  :key="item.value"
                  @close="deletetag(item)"
                  style="margin-bottom: 5px"
                  @dblclick="handledblclick(item)"
                >
                  <span class="a-select__tags-text tagname" v-if="!item.iseditname">
                    <cellipsis :length="8" :tooltip="true">
                      {{ item.label }}
                    </cellipsis>
                    <div title="删除"><a-icon type="close" @click.stop="removelabel(item)" /></div>
                  </span>
                  <a-input
                    v-else
                    :ref="'input_' + item.value"
                    v-model="item.label"
                    :maxlength="22"
                    @pressenter="sumbitlabel(item)"
                    placeholder="请输入标签名称"
                    @blur="sumbitlabel(item)"
                  ></a-input>
                </a-tag>
              </transition-group>
            </draggable>
          </a-spin>
        </div>
      </div>

style代码块

    .bodyright {
      width: 65%;
      height: 100%;
      .bodyrighttitle {
        width: 100%;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding-bottom: 10px;
        line-height: 18px;
      }
      .bodyrightlabel {
        width: 100%;
        height: 90%;
        overflow-y: auto;
        border: 2px solid #d9d9d9;
        border-radius: 4px;
        display: flex;
        flex-wrap: wrap;
        justify-content: flex-start;
        align-content: flex-start;
        .bodyrightdraggable {
          display: flex;
          flex-wrap: wrap;
          padding: 10px;
        }
        .tabs {
          width: 125px;
          height: 35px;
          border: 1px dashed #ccc;
          border-radius: 25px;
          font-size: 16px;
          align-items: center;
          display: flex;
          cursor: pointer;
          .tagname {
            width: 100%;
            display: flex;
            justify-content: space-between;
          }
          i {
            display: none;
          }
          &:hover {
            i {
              font-size: 16px;
              color: red;
              display: inline-block;
            }
          }
        }
        //***.第五步 样式
        .chosen {
          .tabs {
            border: 1px solid #1890ff;
            background-color: #fff !important;
            color: #1890ff;
            cursor: move;
          }
        }
      }
    }

注意点:

1.我的vuedraggable版本是2.24.3
2.官网文档地址:https://www.itxst.com/vue-draggable/tutorial.html

到此这篇关于vue使用vuedraggable插件实现拖拽效果的文章就介绍到这了,更多相关vue vuedraggable拖拽内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com