【问题标题】:My OOP is not working with my menu我的 OOP 不适用于我的菜单
【发布时间】:2017-06-01 04:22:51
【问题描述】:

我尝试在 OOP Javascript 中制作菜单以防止重复代码。我有两个用于桌面汉堡图标的菜单元素“toggleBtn”和用于移动布鲁格图标的“toggleBtnMobile”。

现在的问题:它不起作用。

 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;
            }

        });

   }

重要通知:我不需要任何有关菜单切换的框架。我正在学习。

【问题讨论】:

    标签: javascript jquery oop menu hamburger-menu


    【解决方案1】:

    你的问题是关闭

    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 键声明了一个、两个和三个变量。这些变量只能在Menu构造函数中看到,用'this'关键字声明,和'this'一起使用

    【讨论】:

    • 它没有帮助。它说 this.openNav() 或 this.closeNav() 不是函数。
    • 您在 Menu 构造函数中声明了变量,并将它们用作 Menu.prototype.openNav 方法中的对象键。例如: "function Menu() { var one = menu.children().eq(1); // 必须是:this.one = menu.children().eq(1); } Menu.prototype.openNav = function () { one.removeClass('One'); }" 你不能用'var'声明变量并在构造函数中使用它
    • 正如我之前所说的那样没有帮助...我将它们与这个关键字一起使用,但这是控制台中的输出:VM2348:58 Uncaught TypeError: this.closeNav is not a function at HTMLButtonElement。 (:58:26) and VM2348:58 Uncaught TypeError: this.openNav is not a function at HTMLButtonElement. (:58:26)
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2021-08-16
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2019-06-17
    • 2011-05-22
    • 2013-06-03
    相关资源
    最近更新 更多