2017-01-17 7 views
0

Я попытался сделать меню в 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.

ответ

0

ваша проблема закрытия

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 

     } 

здесь вы объявили один, два и три переменные с ключом вар. эти переменные можно увидеть только в конструкторе меню, объявить их с помощью этого «ключевого слова» и использовать их с «этим»

+0

Это не помогло. Он говорит, что this.openNav() или this.closeNav() не является функцией. –

+0

вы указали свои переменные в конструкторе меню и использовали их как ключ объекта в методе 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

+0

Это не помогло, как я сказал ранее. . Я использовал их с этим ключевым словом, но вот вывод в консоли: VM2348: 58 Uncaught TypeError: this.closeNav не является функцией в HTMLButtonElement. (: 58: 26) и VM2348: 58 Uncaught TypeError: this.openNav не является функцией в HTMLButtonElement. (: 58: 26) –

 Смежные вопросы

  • Нет связанных вопросов^_^