javascript - 打开 : Showing Cannot read property error 后边栏不关闭

标签 javascript jquery html css

我正在处理侧边栏菜单,但在单击汉堡菜单时未打开 =in。它显示此错误: 无法读取 null(…) 的属性“className”

document.addEventListener("DOMContentLoaded", function(event) {

  $('#nav-icon').click(function() {
    $(this).toggleClass('open');
    if (this.className) {
      //menu is open right now
      var getClass = document.querySelector(".desktop-nav").className;
      var updateClass = ".desktop-nav" + " desktop-nav-open";
      document.querySelector(".desktop-nav").className = updateClass;
    } else {
      //menu is closed right now
      var getClass = document.querySelector(".desktop-nav").className;
      var updateClass = ".desktop-nav";
      document.querySelector(".desktop-nav").className = updateClass;
    }
  });

});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
div.full-width-div {
  width: 100%;
  margin: 0;
  padding: 0;
}
.container {
  width: 100%;
  margin: 0;
  padding: 0;
}
div#mainrow {
  width: 100%;
  margin: 0;
  padding: 0;
  display: flex;
}
div#right-content {
  margin: 0;
  padding: 0;
  width: 100%;
}
div.maincol {
  margin: 0;
  padding: 0;
}
div#desktop-nav-wrap {
  height: 100%;
  position: relative;
  background-color: #212331;
}
div.desktop-nav {
  height: 100vh;
  position: fixed;
  width: 200px;
  top: 0;
  left: 0;
  background-color: #212331;
  z-index: 10;
  -webkit-transition: left 0.8s ease-out, padding 0s ease-in-out;
  -moz-transition: left 0.8s ease-out, padding 0s ease-in-out;
  transition: left 0.8s ease-out, padding 0s ease-in-out;
}
div.mobile-nav {
  height: 100vh;
  position: fixed;
  width: 65px;
  top: 0;
  left: 0;
  background-color: #212331;
  z-index: 10;
  visibility: hidden;
  -webkit-transition: left 0.8s ease-out, padding 0s ease-in-out;
  -moz-transition: left 0.8s ease-out, padding 0s ease-in-out;
  transition: left 0.8s ease-out, padding 0s ease-in-out;
}
@media (max-width: 991px) {
  div.desktop-nav {
    left: -260px;
  }
  div.desktop-nav-open {
    left: 65px;
  }
  div.mobile-nav {
    visibility: visible;
  }
  div.mobile-nav-open {
    left: 200px;
  }
}
@media (min-width: 768px) {
  div.mobile-nav {
    width: 70px;
  }
}
@media (min-width: 1150px) {
  div.desktop-nav {
    width: 250px;
  }
}
div#logo-div {
  width: 100%;
}
div#logo-div img {
  display: block;
  width: 100%;
}
div#desktop-navigation {
  width: 100%;
  margin: 0;
  padding: 0;
}
div#desktop-navigation>ul {
  width: 100%;
  margin: 0;
  padding: 0;
  margin-top: 30px;
}
div#desktop-navigation>ul>li {
  width: 100%;
  margin: 0;
  padding: 0;
  list-style-type: none;
}
div#desktop-navigation>ul>li>a {
  width: 100%;
  margin: 0;
  padding: 0;
  color: white;
  font-family: 'Dosis';
  text-transform: uppercase;
  text-align: center;
  letter-spacing: 3px;
  line-height: 45px;
  display: block;
  font-size: 1em;
}
div#desktop-navigation>ul>li>a:hover,
div#desktop-navigation>ul>li>a:visited {
  text-decoration: none;
  background-color: #323445;
}
#nav-icon {
  width: 35px;
  height: 30px;
  position: relative;
  margin: 20px auto;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: pointer;
}
@media (min-width: 768px) {
  #nav-icon {
    width: 40px;
  }
}
#nav-icon span {
  display: block;
  position: absolute;
  height: 2px;
  width: 100%;
  background: #d3531a;
  border-radius: 9px;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .25s ease-in-out;
  -moz-transition: .25s ease-in-out;
  -o-transition: .25s ease-in-out;
  transition: .25s ease-in-out;
}
#nav-icon span:nth-child(1) {
  top: 0px;
}
#nav-icon span:nth-child(2) {
  top: 12px;
}
#nav-icon span:nth-child(3) {
  top: 24px;
}
#nav-icon.open span:nth-child(1) {
  top: 12px;
  -webkit-transform: rotate(135deg);
  -moz-transform: rotate(135deg);
  -o-transform: rotate(135deg);
  transform: rotate(135deg);
}
#nav-icon.open span:nth-child(2) {
  opacity: 0;
  left: -60px;
}
#nav-icon.open span:nth-child(3) {
  top: 12px;
  -webkit-transform: rotate(-135deg);
  -moz-transform: rotate(-135deg);
  -o-transform: rotate(-135deg);
  transform: rotate(-135deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="row" id="mainrow">
    <div class="col-md-2 col-sm-1 col-xs-1 maincol">
      <div id="desktop-nav-wrap">
        <div class="desktop-nav">
          <div id="logo-div">
            <a href="index.html">
              <img src="img/logo.png" />
            </a>
          </div>
          <div id="desktop-navigation">
            <ul>
              <li><a href="about.html">About</a>
              </li>
              <li><a href="events.html">Events</a>
              </li>
              <li><a href="calendar.html">Calendar</a>
              </li>
              <li><a href="insights.html">Insights</a>
              </li>
              <li><a href="resources.html">Resources</a>
              </li>
              <li><a href="news.html">News</a>
              </li>
              <li><a href="team.html">Out Team</a>
              </li>
              <li><a href="contact.html">Contact</a>
              </li>
            </ul>
          </div>
        </div>
        <div class="mobile-nav">
          <div id="nav-icon">
            <span></span>
            <span></span>
            <span></span>
          </div>
        </div>
      </div>
    </div>
    <div class="col-md-10 col-sm-11 col-xs-11 maincol">
    </div>
  </div>
  <!--end of row-->
</div>
<!--end of container-->

http://codepen.io/anon/pen/bBxGEP

最佳答案

因为您已经在使用 jQuery,所以这也可以通过更简单的方式完成。

$(function() {
  $('#nav-icon').click(function() {
    $(this).toggleClass('open');
    $(".desktop-nav").toggleClass("desktop-nav-open")
  });
});
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
div.full-width-div {
  width: 100%;
  margin: 0;
  padding: 0;
}
.container {
  width: 100%;
  margin: 0;
  padding: 0;
}
div#mainrow {
  width: 100%;
  margin: 0;
  padding: 0;
  display: flex;
}
div#right-content {
  margin: 0;
  padding: 0;
  width: 100%;
}
div.maincol {
  margin: 0;
  padding: 0;
}
div#desktop-nav-wrap {
  height: 100%;
  position: relative;
  background-color: #212331;
}
div.desktop-nav {
  height: 100vh;
  position: fixed;
  width: 200px;
  top: 0;
  left: 0;
  background-color: #212331;
  z-index: 10;
  -webkit-transition: left 0.8s ease-out, padding 0s ease-in-out;
  -moz-transition: left 0.8s ease-out, padding 0s ease-in-out;
  transition: left 0.8s ease-out, padding 0s ease-in-out;
}
div.mobile-nav {
  height: 100vh;
  position: fixed;
  width: 65px;
  top: 0;
  left: 0;
  background-color: #212331;
  z-index: 10;
  visibility: hidden;
  -webkit-transition: left 0.8s ease-out, padding 0s ease-in-out;
  -moz-transition: left 0.8s ease-out, padding 0s ease-in-out;
  transition: left 0.8s ease-out, padding 0s ease-in-out;
}
@media (max-width: 991px) {
  div.desktop-nav {
    left: -260px;
  }
  div.desktop-nav-open {
    left: 65px;
  }
  div.mobile-nav {
    visibility: visible;
  }
  div.mobile-nav-open {
    left: 200px;
  }
}
@media (min-width: 768px) {
  div.mobile-nav {
    width: 70px;
  }
}
@media (min-width: 1150px) {
  div.desktop-nav {
    width: 250px;
  }
}
div#logo-div {
  width: 100%;
}
div#logo-div img {
  display: block;
  width: 100%;
}
div#desktop-navigation {
  width: 100%;
  margin: 0;
  padding: 0;
}
div#desktop-navigation>ul {
  width: 100%;
  margin: 0;
  padding: 0;
  margin-top: 30px;
}
div#desktop-navigation>ul>li {
  width: 100%;
  margin: 0;
  padding: 0;
  list-style-type: none;
}
div#desktop-navigation>ul>li>a {
  width: 100%;
  margin: 0;
  padding: 0;
  color: white;
  font-family: 'Dosis';
  text-transform: uppercase;
  text-align: center;
  letter-spacing: 3px;
  line-height: 45px;
  display: block;
  font-size: 1em;
}
div#desktop-navigation>ul>li>a:hover,
div#desktop-navigation>ul>li>a:visited {
  text-decoration: none;
  background-color: #323445;
}
#nav-icon {
  width: 35px;
  height: 30px;
  position: relative;
  margin: 20px auto;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: pointer;
}
@media (min-width: 768px) {
  #nav-icon {
    width: 40px;
  }
}
#nav-icon span {
  display: block;
  position: absolute;
  height: 2px;
  width: 100%;
  background: #d3531a;
  border-radius: 9px;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .25s ease-in-out;
  -moz-transition: .25s ease-in-out;
  -o-transition: .25s ease-in-out;
  transition: .25s ease-in-out;
}
#nav-icon span:nth-child(1) {
  top: 0px;
}
#nav-icon span:nth-child(2) {
  top: 12px;
}
#nav-icon span:nth-child(3) {
  top: 24px;
}
#nav-icon.open span:nth-child(1) {
  top: 12px;
  -webkit-transform: rotate(135deg);
  -moz-transform: rotate(135deg);
  -o-transform: rotate(135deg);
  transform: rotate(135deg);
}
#nav-icon.open span:nth-child(2) {
  opacity: 0;
  left: -60px;
}
#nav-icon.open span:nth-child(3) {
  top: 12px;
  -webkit-transform: rotate(-135deg);
  -moz-transform: rotate(-135deg);
  -o-transform: rotate(-135deg);
  transform: rotate(-135deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="row" id="mainrow">
    <div class="col-md-2 col-sm-1 col-xs-1 maincol">
      <div id="desktop-nav-wrap">
        <div class="desktop-nav">
          <div id="logo-div">
            <a href="index.html">
              <img src="img/logo.png" />
            </a>
          </div>
          <div id="desktop-navigation">
            <ul>
              <li><a href="about.html">About</a>
              </li>
              <li><a href="events.html">Events</a>
              </li>
              <li><a href="calendar.html">Calendar</a>
              </li>
              <li><a href="insights.html">Insights</a>
              </li>
              <li><a href="resources.html">Resources</a>
              </li>
              <li><a href="news.html">News</a>
              </li>
              <li><a href="team.html">Out Team</a>
              </li>
              <li><a href="contact.html">Contact</a>
              </li>
            </ul>
          </div>
        </div>
        <div class="mobile-nav">
          <div id="nav-icon">
            <span></span>
            <span></span>
            <span></span>
          </div>
        </div>
      </div>
    </div>
    <div class="col-md-10 col-sm-11 col-xs-11 maincol">
    </div>
  </div>
  <!--end of row-->
</div>
<!--end of container-->

关于javascript - 打开 : Showing Cannot read property error 后边栏不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088079/

相关文章:

javascript - 如何禁用 div 元素内的 anchor 标记 onclick 事件?

javascript - JQuery - 我可以使用什么方法来运行此代码而无需单击

javascript - 如何合并由输入的 val 获取的 2 个对象

javascript - 底部 float 工具栏,居中,当前屏幕宽度的 80%

javascript - jQuery 数据表 : Combining column visibility with individual column filters (text inputs)?

javascript - 用于页面的灯箱 javascript/flash

javascript - 计算数字落入的范围

jquery - 数组循环中的自定义类不起作用

javascript - 如何在 html 中将 JSON 显示为格式化 View

javascript - 如何使用 jquery 创建图像缩放效果?