javascript 具有多个菜单的菜单功能 - ES6类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 具有多个菜单的菜单功能 - ES6类相关的知识,希望对你有一定的参考价值。

import {SubMenu} from './sub-menu.js';

/**
 * Menu Sub Level Reveal
 *
 */
export class Menu {
  /**
   * Constructor
   */
  constructor() {
    const triggers = document.querySelectorAll('.js-sub-nav-trigger');
    this.triggerList = [...triggers].map(trigger => new SubMenu(trigger, () => this.closeAllMenus()));
  }

  /**
   * Closes all menus
   */
  closeAllMenus() {
    this.triggerList.forEach(trigger => trigger.close());
  }
}
/**
 * The Sub Menu
 *
 */
export class SubMenu {
  /**
   * Constructor
   * @param {Element} element - Menu trigger
   * @param {function} closeAllMenus - Closes all the menus
   */
  constructor(element, closeAllMenus) { // In this example, the 'element' is the parent of the trigger and the menu
    this.triggerAnchor = element.querySelector('.main-nav__menu-anchor');
    this.subMenu = element.querySelector('.sub-menu');
    this.triggerActiveClass = 'main-nav__menu-anchor--active';
    this.menuActiveClass = 'sub-menu--active';
    this.triggerAnchor.addEventListener('click', event => this.toggle(event));
    this.activeState = false;
    this.closeAllMenus = closeAllMenus;
  }

  /**
   * Opens the sub menu
   *
   */
  open() {
    this.closeAllMenus();
    this.triggerAnchor.classList.add(this.triggerActiveClass);
    this.subMenu.classList.add(this.menuActiveClass);
    this.activeState = true;
  }

  /**
   * Closes the sub menu
   *
   */
  close() {
    this.triggerAnchor.classList.remove(this.triggerActiveClass);
    this.subMenu.classList.remove(this.menuActiveClass);
    this.activeState = false;
  }

  /**
   * Toggle the sub menu
   * @param {Event} event - Prevents the default action of the anchor
   */
  toggle(event) {
    event.preventDefault();
    if (this.activeState) {
      this.close();
    } else {
      this.open();
    }
  }
}

以上是关于javascript 具有多个菜单的菜单功能 - ES6类的主要内容,如果未能解决你的问题,请参考以下文章

具有多个屏幕的 KivyMD 菜单

自定义具有多个条件的纯CSS响应菜单

多个文档同时打开,每个文档具有不同的菜单项状态

具有 10 多个项目的 SwiftUI 菜单按钮

如何创建具有多个菜单的pygame?

Android - 具有多个底部导航菜单的导航组件