当前位置: 首页 > 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;

    },

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

http://www.lryc.cn/news/537232.html

相关文章:

  • 同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展
  • 硬件学习笔记--42 电磁兼容试验-6 传导差模电流干扰试验介绍
  • 基于 Filebeat 的日志收集
  • Next.js 15【实用教程】2025最新版
  • vue学习10
  • redis 缓存击穿问题与解决方案
  • 【Vue3 入门到实战】16. Vue3 非兼容性改变
  • 20250214 随笔 Elasticsearch(ES)索引数据 vs. 业务数据库冗余双写
  • c# textbox 设置不获取光标
  • 中望CAD c#二次开发 ——VS环境配置
  • anolis os 8.9安装jenkins
  • HtmlRAG:RAG系统中,HTML比纯文本效果更好
  • TypeScript 中的 reduce计算统计之和
  • HTTP/2 由来及特性
  • android 安装第三方apk自动赋予运行时权限
  • PyTorch Lightning LightningDataModule 介绍
  • windows平台上 oracle简单操作手册
  • 【网络安全 | 漏洞挖掘】价值3133美元的Google IDOR
  • LabVIEW太阳能制冷监控系统
  • 10.2 Git 内部原理 - Git 对象
  • 作业。。。。。
  • android 的抓包工具
  • 深入剖析推理模型:从DeepSeek R1看LLM推理能力构建与优化
  • linux中top命令详解
  • 前端包管理器的发展以及Npm、Yarn和Pnpm对比
  • node.js+兰空图床实现随机图
  • 【MySQL】高频 SQL 50 题(基础版)
  • 盛铂科技 SMF106 低相位噪声贴片式频率综合器模块
  • C语言如何实现面向对象?——从结构体到自由函数的思考
  • 深入探索C语言中的字符串处理函数:strstr与strtok