Не работает потому что у вас ошибка в строчках:
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. Лучшие времена этой библиотеки уже давно прошли.