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

gulimall项目笔记:P54三级分类拖拽功能实现

gulimall项目笔记:P54三级分类拖拽功能实现

技术方案

采用ElementUI的Tree树形控件实现分类拖拽功能

Tree控件界面示例

功能规则

  • 层级限制:分类结构最多支持3级
  • 拖拽验证:通过ElementUI的allow-drop事件实现

核心参数

allow-drop事件包含三个关键参数:

  1. draggingNode - 拖拽中的节点
  2. dropNode - 目标放置节点
  3. type - 拖拽类型(‘prev’、‘inner’、‘next’)

参数说明图示

参数draggingNodedropNode包含两个重要属性:

  • childNodes - 子节点集合
  • level - 节点层级

节点属性说明

实现逻辑

1.计算子树深度(countNodeLevel方法)
首先通过计算当前拖拽节点draggingNode的最大子树的level

countNodeLevel(node) {if(node.childNodes != null && node.childNodes.length > 0){for(let i = 0; i< node.childNodes.length; i ++){if(node.childNodes[i].level > this.maxLevel){this.maxLevel = node.childNodes[i].level;}this.countNodeLevel(node.childNodes[i]);}	}
}

然后在计算出draggingNode的最大深度deep
deep = this.maxLevel – draggingNode.level + 1
基于这些参数,三级目录结构可归纳为三种情况:

在这里插入图片描述

2.允许拖拽判断(allowDrop方法):
然后根据拖拽放置类型type(inner表示插入目标节点内,prev或next表示放置在目标节点前后)来判断是否允许拖拽。如果是inner类型,判断deep + dropNode.level <= 3;如果是before或after类型,判断deep + dropNode.parent.level <= 3。

if (type == ‘inner’) {return deep + dropNode.level <= 3;
}else{return deep + dropNode.parent.level <= 3;
}

扩展

如果层级限制的分类结构最多支持n级,我们只需要把<= 3改成<= n即可。

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

相关文章:

  • 深入理解C++正则表达式:从基础到实践
  • ramdisk内存虚拟盘(一)——前世今生
  • Python爬取推特(X)的各种数据
  • 功能组和功能组状态的概念关系和区别
  • 【揭秘红黑树:高效数据结构解析】
  • 谈谈《More Effective C++》的条款30:代理类
  • JavaScript 防抖(Debounce)与节流(Throttle)
  • Python入门第2课:变量、数据类型与输入输出
  • MySQL(多表查询练习)
  • C#控制台输入(Read()、ReadKey()和ReadLine())
  • 【大模型微调系列-01】 入门与环境准备
  • Linux信号保存
  • PowerShell 格式化系统完全掌握(上):工作原理、默认规则与三大格式化命令
  • 【数据分享】上市公司创新韧性数据(2007-2023)
  • 数据处理分析环境搭建+Numpy使用教程
  • MySQL、PolarDB、PolarDB-X、TableStore、MongoDB、TiDB、ClickHouse选型
  • CIAIE 2025上海汽车内外饰展观察:从美学到功能的产业跃迁
  • 中级统计师-会计学基础知识-第一章 账户与复试记账
  • imx6ull-驱动开发篇25——Linux 中断上半部/下半部
  • 嵌入式学习 day52 IMX6ULL裸机开发-I2C
  • Redis核心应用场景及代码案例
  • WordPress 7B2主题,在使用PHP 8.0+出现502的解决办法。
  • 【机器学习深度学习】OpenCompass 评测指标全解析:让大模型评估更科学
  • platform总线注册流程分析
  • 洛谷 P2842 纸币问题 1 -普及-
  • C++类与对象核心知识点全解析(下)
  • 模板方法模式C++
  • 机器翻译:模型微调(Fine-tuning)与调优详解
  • JavaWeb开发_Day13
  • vue3相关基础