Я попытался сделать меню в OOP Javascript, чтобы предотвратить повторяемый код. У меня есть два элемента меню «toggleBtn» для значка Desktop Burger и «toggleBtnMobile» для значка Mobile Bruger.Мой OOP не работает с моим меню
Проблема прямо сейчас: она не работает.
var $this = $(this),
$navSidebar = $('#navSidebar'),
$navDlrz = $('#navDlrz'),
$toggleBtn = $('#toggleBtn'),
$toggleBtnMobile = $('#toggleBtnMobile'),
$menuHasChildren = $('.menu-item-has-children'),
$subMenu = $menuHasChildren.find('ul.sub-menu');
// Menu class
function Menu(menu) {
this.menu = menu;
var one = menu.children().eq(1); // Burger Icons top bar
var two = menu.children().eq(2); // Burger Icons middle bar
var three = menu.children().eq(3); // Burger Icons bottom bar
}
// When the Nav is clicked, the burger Icon transforms into "X"
Menu.prototype.openNav = function() {
one.addClass('One');
two.addClass('Two');
three.addClass('Three');
$navSidebar.css('left', '0px');
$navDlrz.css('left', '200px');
};
// Back to standard Icon
Menu.prototype.closeNav = function() {
one.removeClass('One');
two.removeClass('Two');
three.removeClass('Three');
$navSidebar.css('left', '-200px');
$navDlrz.css('left', '0px');
}
Menu.prototype.toggleNav = function() {
menu.click(function() {
var $this = $(this),
$className = $this.attr('class');
switch($className) {
case 'navbar-toggle':
$this.addClass('open');
this.openNav();
break;
case 'navbar-toggle open':
$this.removeClass('open');
$menuHasChildren.removeClass('open');
$menuHasChildren.find('ul.sub-menu').removeClass('open');
this.closeNav();
break;
}
});
}
Important notice: I don't need any framework regarding menu toggeling. I'm learning at the moment.
Это не помогло. Он говорит, что this.openNav() или this.closeNav() не является функцией. –
вы указали свои переменные в конструкторе меню и использовали их как ключ объекта в методе Menu.prototype.openNav. например: "function Menu() { var one = menu.children(). eq (1); // должно быть: this.one = menu.children(). eq (1); } Меню. prototype.openNav = function() { one.removeClass ('One'); } " Вы не можете объявить переменную с помощью 'var' и использовать ее из конструктора – Bakshi
Это не помогло, как я сказал ранее. . Я использовал их с этим ключевым словом, но вот вывод в консоли: VM2348: 58 Uncaught TypeError: this.closeNav не является функцией в HTMLButtonElement. (: 58: 26) и VM2348: 58 Uncaught TypeError: this.openNav не является функцией в HTMLButtonElement. (: 58: 26) –