当前位置:首页 > JavaScript

js实现无穷树形菜单

2026-01-31 01:34:56JavaScript

实现无穷树形菜单的方法

数据结构设计

使用递归结构存储树形数据,每个节点包含idlabelchildren等属性。示例数据结构:

const treeData = [
  {
    id: 1,
    label: '节点1',
    children: [
      {
        id: 2,
        label: '子节点1',
        children: [] 
      }
    ]
  }
]

递归组件实现

通过递归组件渲染无限层级树形结构。Vue实现示例:

<template>
  <ul>
    <li v-for="node in treeData" :key="node.id">
      {{ node.label }}
      <TreeMenu v-if="node.children.length" :treeData="node.children"/>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TreeMenu',
  props: ['treeData']
}
</script>

动态加载子节点

实现懒加载功能,当展开节点时异步加载子节点数据:

js实现无穷树形菜单

function loadChildren(parentId) {
  return fetch(`/api/nodes?parentId=${parentId}`)
    .then(res => res.json())
}

交互功能实现

添加展开/折叠功能,通过CSS控制显示状态:

data() {
  return {
    expanded: false
  }
},
methods: {
  toggle() {
    this.expanded = !this.expanded
    if(this.expanded && !this.node.children.length) {
      loadChildren(this.node.id).then(children => {
        this.node.children = children
      })
    }
  }
}

性能优化

对于大型树结构实现虚拟滚动,只渲染可视区域内的节点:

js实现无穷树形菜单

// 使用vue-virtual-scroll-list等库
<VirtualList :size="30" :remain="10">
  <TreeItem v-for="item in list" :key="item.id"/>
</VirtualList>

样式处理

使用CSS实现缩进和连接线效果:

.tree-node {
  padding-left: 20px;
  position: relative;
}
.tree-node::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  width: 1px;
  height: 100%;
  background: #ddd;
}

完整实现示例

React函数组件实现方案:

function TreeNode({ node }) {
  const [expanded, setExpanded] = useState(false);

  return (
    <li>
      <div onClick={() => setExpanded(!expanded)}>
        {node.children.length ? (expanded ? '▼' : '▶') : '•'} {node.label}
      </div>
      {expanded && node.children.length > 0 && (
        <ul>
          {node.children.map(child => (
            <TreeNode key={child.id} node={child} />
          ))}
        </ul>
      )}
    </li>
  );
}

标签: 菜单js
分享给朋友:

相关文章

vue实现菜单定位

vue实现菜单定位

实现菜单定位的方法 在Vue中实现菜单定位功能,可以通过监听滚动事件或使用Intersection Observer API来判断当前显示的菜单项,并高亮对应的导航链接。以下是几种常见的实现方式:…

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…