• Почему не работает бургер меню?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    Не работает потому что у вас ошибка в строчках:

    menu.toggleClass('.burger-menu_active');
    menu.hasClass('.burger-menu_active')

    Нужно просто убрать точки перед именами классов в этих методах:

    menu.toggleClass() & menu.hasClass()

    Полезная информация по этим методам: JQuery - toggleClass и JQuery - hasClass и совет на будущее: Если используете ту или иную библиотеку, читайте внимательнее документацию. Это намного упрощает жизнь.

    Однако уже пора отказаться от JQuery, так как эта библиотека устарела и нет смысла тянуть лишнию зависимость.

    Переписать исходную функцию на нативный JS, можно например так:

    function burgerMenu(selector) {
      const menuElement = document.querySelector(selector);
    
      const elements = [
        "burger-menu_link",
        "burger-menu_button",
        "burger-menu_overlay",
      ];
    
      const isTriggerElement = (element) => {
        return [...element.classList].some((className) =>
          elements.includes(className)
        );
      };
    
      menuElement.addEventListener("click", ({ target }) => {
        if (isTriggerElement(target)) {
          toggleMenu();
        }
      });
    
      function toggleMenu() {
        menuElement.classList.toggle("burger-menu_active");
        menuElement.classList.contains("burger-menu_active")
          ? document.body.classList.add("no-scroll")
          : document.body.classList.remove("no-scroll");
      }
    }
    
    burgerMenu(".burger-menu");


    И немного дополнить стили.

    Добавить правило pointer-events: none для элемента .burger-menu_lines

    .burger-menu_lines {
       pointer-events: none;
    }


    И добавить новый класс:

    .no-scroll {
       overflow: hidden;
    }


    Намного проще написать подобный функционал на чистом JS и не стоит тащить в проект зависимость в виде Jquery. Лучшие времена этой библиотеки уже давно прошли.
    Ответ написан
    1 комментарий