首页 > 其他分享 >拖拽 插件

拖拽 插件

时间:2023-08-01 14:47:30浏览次数:32  
标签:sort flex 插件 index 拖拽 width display tagsList

vue拖拽使用vuedraggable插件实现

 

第一步:安装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

原文 https://blog.csdn.net/weixin_43861689/article/details/130767345

 

第一步:安装vuedraggable插件//npm方式安装npm i -S vuedraggable
//或使用yarn安装yarn add vuedraggable12345第二步:在页面引入组件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>1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465template代码块      <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>1234567891011121314151617181920212223242526272829303132333435363738394041424344style代码块    .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;          }        }      }    }————————————————版权声明:本文为CSDN博主「鱼干~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weixin_43861689/article/details/130767345

标签:sort,flex,插件,index,拖拽,width,display,tagsList
From: https://www.cnblogs.com/wsj1/p/17596396.html

相关文章

  • 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键
    SublimeText是一个代码编辑器,也是HTML和散文先进的文本编辑器。SublimeText是由程序员JonSkinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。SublimeText具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和......
  • ugui学习 - 自己实现InputField鼠标点击调整光标位置,拖拽修改选中区域
    效果 代码usingUnityEngine;usingUnityEngine.EventSystems;usingUnityEngine.UI;publicclassMyInputField_CaretDragOp:MyInputField_TextSelect,IDragHandler,IPointerDownHandler{publicvoidOnPointerDown(PointerEventDataeventData){......
  • vue-scrollmagic 滚动动画制作插件
     1、需求:在做网站的时候、需要加一个根据页面滚动位置进行页面变化的效果。2、实现方案:自己写个滚动监听也不是很复杂、但是管理维护起来比较乱。所以直接找了这个插件官网:vue-scrollmagic、插件地址3、使用:安装npmivue-scrollmagic--save载入//main.jsimportV......
  • Android应用开发的插件化 模块化
    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度。  由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒,使得开发一个灵活多变的程序,变得比较困难,不像pc平台下那么容易。  瞅瞅elipse的插件,瞅瞅360的插件,在an......
  • 浏览器中的自动化操作插件:Automa
    相信很多小伙伴跟我一样,每天都有大量基于浏览器的重复操作,比如:查看任务、查看新闻、查看各种每天要关注的内容,甚至可能还需要对其做一些操作。那么这些任务是否有办法自动化执行呢?今天就给大家推荐一个浏览器扩展程序:Automa。Automa是一个开源的浏览器扩展,它可以基于浏览器来执行......
  • 轻量级的工作流引擎:提质增效+灵活简便+拖拽式设计
    低代码开发市场现在正是蓬勃发展的时期,由于低代码技术平台能够为当代企业节省很多宝贵时间,实现提质增效的办公效率,因此获得了大家的认可与喜爱。其中,工作流引擎是当中的主要功能,其拖拽式设计、易操作等优势特点也深受大家的喜爱。今天,我们就一起来聊聊这轻量级的工作流引擎是如何......
  • APP Inventor的tcp连接扩展插件
    参考原文:知乎https://zhuanlan.zhihu.com/p/164995185下载地址:https://cloud.bemfa.com/zip/aia/app_invertor.zip使用方法在网站中新建项目,或者打开已有项目。在组件面板的最下方,点击“Extension”,然后点击“Importextension”导入插件。......
  • 4.重置集群,更换网络插件calico
    网络插件kubernetes最流行的网络查件:flannel和calico如果kubernetes节点不超过50个用InstallCalicowithKubernetesAPIdatastore,50nodesorless如果kubernetes超过50个节点用InstallCalicowithKubernetesAPIdatastore,morethan50nodes如果使用独立的etcd集......
  • 如何将百度翻译的API接入第三方插件或软件中?
      本文介绍获取百度翻译官方接口及其密钥,并将接口授权给自己或他人开发的软件或插件的方法。  首先,打开百度翻译开放平台网站,首先点击右上角进行登录。  登录后,选择“管理控制台”。  首次进入“管理控制台”,需要首先注册为百度翻译的开发者身份。在这里,我们选择“个......
  • 解决:vscode插件C/C++ CompileRun 输出中文乱码问题
    打开插件设置在该设置中加入语句-fexec-charset=GBK即可......