当前位置: 首页 > news >正文

实现Tree 树形控件的鼠标拖拽功能

1.element中的el-tree实现可拖拽节点

通过 draggable 属性可让节点变为可拖拽

 <el-tree

        :data="data"

        node-key="id"

        default-expand-all

        @node-drag-start="handleDragStart"

        @node-drag-enter="handleDragEnter"

        @node-drag-leave="handleDragLeave"

        @node-drag-over="handleDragOver"

        @node-drag-end="handleDragEnd"

        @node-drop="handleDrop"

        draggable

        :allow-drop="allowDrop"

        :allow-drag="allowDrag"

      >

      </el-tree>

  methods: {

    handleDragStart(node, ev) {

      console.log("drag start", node);

    },

    handleDragEnter(draggingNode, dropNode, ev) {

      console.log("tree drag enter: ", dropNode.label);

    },

    handleDragLeave(draggingNode, dropNode, ev) {

      console.log("tree drag leave: ", dropNode.label);

    },

    handleDragOver(draggingNode, dropNode, ev) {

      console.log("tree drag over: ", dropNode.label);

    },

    handleDragEnd(draggingNode, dropNode, dropType, ev) {

      console.log("tree drag end: ", dropNode && dropNode.label, dropType);

    },

    handleDrop(draggingNode, dropNode, dropType, ev) {

      console.log("tree drop: ", dropNode.label, dropType);

    },

    allowDrop(draggingNode, dropNode, type) {

      if (dropNode.data.label === "二级 3-1") {

        return type !== "inner";

      } else {

        return true;

      }

    },

    allowDrag(draggingNode) {

      return draggingNode.data.label.indexOf("三级 3-2-2") === -1;

    },

  },

实现一个只能在本级改变位置拖拽

使用allowDrop

   // 拖拽时判定目标节点能否被放置。

    //draggingNode(拖拽的节点)

    //dropNode(放置的目标节点)

    //type 参数有三种情况:'prev'、'inner' 和 'next',分别表示

    //放置在目标节点前、插入至目标节点和放置在目标节点后

    allowDrop(draggingNode, dropNode, type) {

      // 一级节点互相拖拽

      // if (draggingNode.level == "1") {

      //   if (dropNode.level == "1") {

      //     return type === "prev" || type === "next";

      //   }

      // }

      // // 二级节点之间互相拖拽,但是只能放在自己的二级节点

      // if (draggingNode.level == "2") {

      //   if (dropNode.level == "2") {

      //     if (dropNode.data.ParentNodes == draggingNode.data.ParentNodes) {

      //       return type === "prev" || type === "next";

      //     }

      //   }

      // }

      if (draggingNode.level == dropNode.level) {

        if (dropNode.data.ParentNodes == draggingNode.data.ParentNodes) {

          return type === "prev" || type === "next";

        }

      }

      return false;

    },

这样就可以实现,同级拖拽

相关文章:

  • USB Flash闪存驱动器安全分析(第一部分)
  • java nio 原理 非阻塞IO Netty
  • sql注入中information_schema被过滤的问题
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • UI用例调试_元素能定位到且不在frame内_无法点击/录入文本
  • 利用Firewalld和Iptables实现IP端口限制与开放
  • SQL最佳实践(笔记)
  • 12.项目结构
  • [Android] 【汽车OBD软件】Torque Pro (OBD 2 Car)
  • 降本增效 - VGF 构建轻量高性能日志管理平台
  • DeepSeek v3 技术报告阅读笔记
  • Unity学习part1
  • 数据结构(陈越,何钦铭)第三讲 树(上)
  • 【Vue3 入门到实战】16. Vue3 非兼容性改变
  • 正则表达式(Regular expresssion)
  • linux 安装ftp
  • AOS安装及操作演示
  • java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义
  • Git分支管理:从入门到高效协作
  • 2025牛客寒假算法基础集训营1
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 王毅:时代不容倒退,公道自在人心
  • 张炜琳已任三明市委常委、宣传部部长
  • 阿里千问3系列发布并开源:称成本大幅下降,性能超越DeepSeek-R1
  • 西湖大学本科招生新增三省两市,首次面向上海招生
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标