Отзывчивое меню отображения/скрытия работает со сбоями

В новом дизайне, над которым я работал, есть боковая панель, которая должна полностью отображаться при просмотре с рабочего стола. На мобильных устройствах меню должно быть свернуто в кнопку, которая при нажатии должна расширяться. Первая функция работает отлично, а вторая нет; когда вы нажимаете эту кнопку, кажется, что вообще ничего не происходит.

Would anyone mind helping me look into this and figure out what the issue is, please?

    function(window, document) {

      var layout = document.getElementById('layout'),
        f - menu = document.getElementById('f-menu'),
        f - menuLink = document.getElementById('f-menuLink');

      function toggleClass(element, className) {
        var classes = element.className.split(/\s+/),
          length = classes.length,
          i = 0;

        for (; i < length; i++) {
          if (classes[i] === className) {
            classes.splice(i, 1);
            break;
          }
        }
        // The className is not found
        if (length === classes.length) {
          classes.push(className);
        }

        element.className = classes.join(' ');
      }

      f - menuLink.onclick = function(e) {
        var active = 'active';

        e.preventDefault();
        toggleClass(layout, active);
        toggleClass(f - menu, active);
        toggleClass(f - menuLink, active);
      };

    }(this, this.document));
    body {
      color: #777;
    }
    .pure-img-responsive {
      max-width: 100%;
      height: auto;
    }
    /*
    Add transition to containers so they can push in and out.
    */
    #layout,
    #f-menu,
    .f-menu-link {
      -webkit-transition: all 0.2s ease-out;
      -moz-transition: all 0.2s ease-out;
      -ms-transition: all 0.2s ease-out;
      -o-transition: all 0.2s ease-out;
      transition: all 0.2s ease-out;
    }
    /*
    This is the parent `<div>` that contains the menu and the content area.
    */
    #layout {
      position: relative;
      padding-left: 0;
    }
    #layout.active {
      position: relative;
      left: 150px;
    }
    #layout.active #f-menu {
      left: 150px;
      width: 150px;
    }
    #layout.active .f-menu-link {
      left: 150px;
    }
    /*
    The content `<div>` is where all your content goes.
    */
    .content {
      margin: 0 auto;
      padding: 0 2em;
      max-width: 800px;
      margin-bottom: 50px;
      line-height: 1.6em;
    }
    .header {
      margin: 0;
      color: #333;
      text-align: center;
      padding: 2.5em 2em 0;
      border-bottom: 1px solid #eee;
    }
    .header h1 {
      margin: 0.2em 0;
      font-size: 3em;
      font-weight: 300;
    }
    .header h2 {
      font-weight: 300;
      color: #ccc;
      padding: 0;
      margin-top: 0;
    }
    .content-subhead {
      margin: 50px 0 20px 0;
      font-weight: 300;
      color: #888;
    }
    /*
    The `#f-menu` `<div>` is the parent `<div>` that contains the `.pure-menu` that
    appears on the left side of the page.
    */
    #f-menu {
      margin-left: -150px;
      /* "#f-menu" width */
      width: 150px;
      position: fixed;
      top: 0;
      left: 0;
      bottom: 0;
      z-index: 1000;
      /* so the menu or its navicon stays above all content */
      background: #191818;
      overflow-y: auto;
      -webkit-overflow-scrolling: touch;
    }
    /*
        All anchors inside the menu should be styled like this.
        */
    #f-menu a {
      color: #999;
      border: none;
      padding: 0.6em 0 0.6em 0.6em;
    }
    /*
        Remove all background/borders, since we are applying them to #f-menu.
        */
    #f-menu .pure-menu,
    #f-menu .pure-menu ul {
      border: none;
      background: transparent;
    }
    /*
        Add that light border to separate items into groups.
        */
    #f-menu .pure-menu ul,
    #f-menu .pure-menu .f-menu-item-divided {
      border-top: 1px solid #333;
    }
    /*
            Change color of the anchor links on hover/focus.
            */
    #f-menu .pure-menu li a:hover,
    #f-menu .pure-menu li a:focus {
      background: #333;
    }
    /*
        This styles the selected menu item `<li>`.
        */
    #f-menu .pure-menu-selected,
    #f-menu .pure-menu-heading {
      background: #2A759B;
    }
    /*
            This styles a link within a selected menu item `<li>`.
            */
    #f-menu .pure-menu-selected a {
      color: #fff;
    }
    /*
        This styles the menu heading.
        */
    #f-menu .pure-menu-heading {
      font-size: 110%;
      color: #fff;
      margin: 0;
    }
    /* -- Dynamic Button For Responsive Menu -------------------------------------*/
    /*
    The button to open/close the Menu is custom-made and not part of Pure. Here's
    how it works:
    */
    /*
    `.f-menu-link` represents the responsive menu toggle that shows/hides on
    small screens.
    */
    .f-menu-link {
      position: fixed;
      display: block;
      /* show this only on small screens */
      top: 0;
      left: 0;
      /* "#f-menu width" */
      background: #000;
      background: rgba(0, 0, 0, 0.7);
      font-size: 10px;
      /* change this value to increase/decrease button size */
      z-index: 10;
      width: 2em;
      height: auto;
      padding: 2.1em 1.6em;
    }
    .f-menu-link:hover,
    .f-menu-link:focus {
      background: #000;
    }
    .f-menu-link span {
      position: relative;
      display: block;
    }
    .f-menu-link span,
    .f-menu-link span:before,
    .f-menu-link span:after {
      background-color: #fff;
      width: 100%;
      height: 0.2em;
    }
    .f-menu-link span:before,
    .f-menu-link span:after {
      position: absolute;
      margin-top: -0.6em;
      content: " ";
    }
    .f-menu-link span:after {
      margin-top: 0.6em;
    }
    /* -- Responsive Styles (Media Queries) ------------------------------------- */
    /*
    Hides the menu at `48em`, but modify this based on your app's needs.
    */
    @media (min-width: 48em) {
      .header,
      .content {
        padding-left: 2em;
        padding-right: 2em;
      }
      #layout {
        padding-left: 150px;
        /* left col width "#f-menu" */
        left: 0;
      }
      #f-menu {
        left: 150px;
      }
      .f-menu-link {
        position: fixed;
        left: 150px;
        display: none;
      }
      #layout.active .f-menu-link {
        left: 150px;
      }
    }
<a href="#f-menu" id="f-menuLink" class="f-menu-link">
  <!-- Hamburger icon -->
  <span></span>
</a>

<div id="f-menu">
  <div class="pure-menu pure-menu-open">
    <a class="pure-menu-heading" href="#">Community</a>

    <ul>
      <li><a href="#">Link 1</a>
      </li>
      <li><a href="#">Link 2</a>
      </li>
      <li><a href="#">Link 3</a>
      </li>
    </ul>
  </div>
</div>

<div id="layout">
  Content goes here.
</div>


person Frozen Rose    schedule 25.09.2014    source источник
comment
Ваши переменные... они генерируют исключения? В частности, f-variables ?   -  person Jack    schedule 25.09.2014


Ответы (1)


Я спрашивал в комментариях о вашем variables и, в частности, "выбрасывают ли они исключения?"

Они на самом деле делают:

SyntaxError: Unexpected token -

Имена переменных недействительны. Обновите их, и ваш JS начнет работать. Вот Fiddle с обновленными именами переменных:

http://jsfiddle.net/jpattishalljr/50jnq2hf/

person Jack    schedule 25.09.2014