Skip to content
文章目录

菜单组件

实现收缩状态的 tooltip

竖向菜单的展开和收缩

竖向菜单的打开/关闭动画

重难点

  1. 子菜单的数量是不确定的,因此要实现height:0 <--> height:auto的过渡动画
  2. 展开所有要分两步:
    1. 找到所有子菜单树的所有未展开的第一个根节点,然后将其子孙节点全部展开(此时无需过渡动画,界面也看不到效果)
    2. 找到所有子菜单树的所有未展开的第一个根节点,然后展开该节点(此时需要过渡动画,界面可以看到效果)
  3. 关闭所有要分两步:
    1. 找到所有子菜单树的所有已展开的第一个根节点,然后关闭(此时需要使用过渡动画,界面可以看到效果)
    2. 找到所有子菜单树的所有已展开的第一个根节点,在第一个根节点关闭之后,找到其所有子孙节点,将子孙节点关闭(此时无需使用过渡动画,界面看不到效果)
  4. 根据 id 打开指定节点
    1. 根据 id 找到菜单节点的节点数据
    2. 找到其所有先辈节点
    3. 记录所有收缩状态的先辈节点 id
    4. 如果存在收缩状态的先辈节点,则将第一个先辈之外的所有先辈节点和需要打开的指定节点展开(此时无需动效),然后再打开第一个先辈节点(此时需要动效)
    5. 如果不存在收缩状态的先辈节点,则直接将指定节点的子菜单打开(此时需要动效)

参考资料

Jquery 的 slideDown、slideUp、slideToggle 原理

Why does getComputedStyle return 'auto' for pixels values right after element creation?

内容 loading 加载后高度变化 CSS3 transition 体验优化

“更多|收起”交互中渐进使用 transition 动画

Vue transition 折叠类动画自动获取隐藏层高度以及手风琴效果实现