2017-01-17 13 views
0

OOP Javascriptでメニューを作ってみました。私はデスクトップバーガーアイコンのための2つのメニュー要素 "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.

答えて

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 

     } 
ここ

あなたはVARキーで1つ、2つ、3つの変数を宣言しています。これらの変数はMenuコンストラクタでのみ表示され、 'this'キーワードで宣言して 'this'で使用します。

+0

これは役に立ちませんでした。これは、this.openNav()またはthis.closeNav()は関数ではないと言います。 –

+0

Menuコンストラクタで変数を宣言し、Menu.prototype.openNavメソッドのオブジェクトキーとして使用しました。 "function Menu(){ var one = menu.children()。eq(1); // this :one = menu.children()。eq(1); } メニュー。 "one.removeClass( 'One'); 'var'で変数を宣言できず、コンストラクタからそれを使用することはできません – Bakshi

+0

これまで述べたように助けになりませんでした。 。私はこのキーワードでそれらを使用しましたが、ここにコンソールの出力があります: VM2348:58 Uncaught TypeError:this.closeNavはHTMLButtonElementの関数 ではありません。 :58:26) とVM2348:58キャッチされない例外TypeError:this.openNavはHTMLButtonElementで機能 ありません。 :58:26) –

関連する問題