0
반복 가능한 코드를 방지하기 위해 OOP Javascript로 메뉴를 만들려고했습니다. 나는 데스크톱 버거 아이콘을위한 두 개의 메뉴 요소 "toggleBtn"과 모바일 브루어 아이콘을위한 "toggleBtnMobile"을 가지고있다.내 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 생성자에서 변수를 선언하고이를 Menu.prototype.openNav 메서드의 객체 키로 사용했습니다. " var one = menu.children(). eq (1); //이어야합니다. this.one = menu.children(). eq (1); } 메뉴. " one.removeClass ('One'); 'var'을 사용하여 변수를 선언 할 수없고 생성자 – Bakshi
에서 사용할 수 없습니다. 이전에 말씀 드린 것처럼 도움이되지 않았습니다. .이 키워드와 함께 사용했지만 콘솔의 출력은 다음과 같습니다. VM2348 : 58 Uncaught TypeError : this.closeNav는 HTMLButtonElement에서 의 함수가 아닙니다. ( : 58 : 26)와 VM2348 : 58 catch되지 않은 오류 : this.openNav가 HTMLButtonElement에서 기능 아니다. ( : 58 : 26) –