华为云菜单栏级联效果

叁歲伎倆 2022-01-20 03:13 367阅读 0赞

华为云菜单级联效果

之前华为云还是有这种效果的,但是目前看官网给取消掉了,网站是用jquery 操作dom 来实现的菜单联动效果,现在想用vue 来实现一遍,所以得先看看人家的代码,然后跟着作分析实现出来。

设计知识点

  • 函数闭包 (Closure)
  • 自定义事件派发(dispatchEvent)
  • 函数放抖动 (debounce)
  • css3 transition

大体思路

用float 布局,ul li横向展开 增添鼠标移入移出事件,给元素增减css 样式控制动画。 当鼠标hover事件到menu 图表中 中展开一级菜单,当进入一级菜单的某一li 是 根据data-key显示二级菜单内容,进入二级菜单类似。 当鼠标移出菜单时,依次从大到小隐藏之前显示的层级。

获取代码

有个App 比较好用可以从爬取整站的前端代码,叫SiteSucker

爬取后的代码

这里代码都是jquery 的函数 比如这种设置隐藏 显示状态的。

  1. // 设置层级导航显示隐藏的状态
  2. var setLevelnavState = function ($el, state) {
  3. var setState = function ($el, state) {
  4. if (state !== 'show' && state !== 'hide') return;
  5. var duration = 300;
  6. var isShow = state === 'show';
  7. var eventFix = isShow ? 'show' : 'hide';
  8. $el.triggerHandler('before' + eventFix);
  9. $el.addClass('sliding');
  10. setTimeout(function () {
  11. $el.toggleClass('show', isShow);
  12. var called = false;
  13. $el.one(transitionEnd, function () {
  14. called = true;
  15. $el.removeClass('sliding');
  16. $el.triggerHandler('after' + eventFix);
  17. });
  18. setTimeout(function () {
  19. if (!called) {
  20. $el.trigger(transitionEnd);
  21. }
  22. }, duration);
  23. }, 0);
  24. };
  25. var setStateStrategy = {};
  26. setStateStrategy.show = function () {
  27. setState($el, 'show');
  28. };
  29. setStateStrategy.hide = function () {
  30. //nextAll() 获得匹配元素集合中每个元素的所有跟随的同胞元素,由选择器筛选是可选的。
  31. var $willHideLevel = $el.add($el.nextAll('.header-allnav-level.show'));
  32. var $lastShowLevel = $willHideLevel.last();
  33. var willHideNumber = $willHideLevel.length;
  34. console.log("-----------------------------------------");
  35. console.log("$el",$el[0].className);
  36. // console.log("$el",$el.nextAll('.header-allnav-level.show'))
  37. console.log("$willHideLevel",$willHideLevel);
  38. // console.log("$lastShowLevel",$lastShowLevel[0].className);
  39. // console.log("$willHideNumber",willHideNumber);
  40. console.log("-----------------------------------------");
  41. // 去除菜单项激活效果
  42. $willHideLevel.find('.header-allnav-common-item,[data-define="allnav-item"]').removeClass('active');
  43. // 从后往前依次隐藏层级菜单
  44. setState($lastShowLevel, 'hide');
  45. $willHideLevel.one('afterhide', function () {
  46. willHideNumber--;
  47. if (willHideNumber <= 0) return;
  48. $lastShowLevel = $lastShowLevel.prev('.header-allnav-level');
  49. console.log("******************************************");
  50. console.log("$lastShowLevel",$lastShowLevel[0].className);
  51. console.log("******************************************");
  52. setState($lastShowLevel, 'hide');
  53. });
  54. };
  55. setStateStrategy[state]();
  56. };
  57. 复制代码

vue 仿写的代码

vue_collapse_menu 源码

发表评论

表情:
评论列表 (有 0 条评论,367人围观)

还没有评论,来说两句吧...

相关阅读

    相关 华为菜单效果

    华为云菜单级联效果 > 之前华为云还是有这种效果的,但是目前看官网给取消掉了,网站是用jquery 操作dom 来实现的菜单联动效果,现在想用vue 来实现一遍,所以得先