如何在显示侧边栏时禁用背景并单击侧边栏以外的任何位置将关闭侧边栏

时间:2015-04-07 20:41:09

标签: javascript jquery css sidebar

我正在为我的网站制作侧边栏。

  1. 当我的侧边栏出现时(单击showRight)我想禁用后台内容,以便用户无法在菜单之外执行任何操作。
  2. 当用户点击背景时,侧边栏将消失,然后他们将再次访问后台内容。现在,当点击隐藏按钮时,我正在关闭侧边栏。
  3. 任何人都可以帮助我吗?

    这是我的代码:

    <html>
    <head>
      <style>
        .cbp-spmenu {
          background: #fff;
          position: fixed;
        }
    
        .cbp-spmenu-vertical {
          width: 400px;
          height: 100%;
          top: 0;
          z-index: 1000;
        }
    
        .cbp-spmenu-right {
          right: -400px;
        }
    
        .cbp-spmenu, #cbp-spmenu-push {
          -webkit-transition: all 0.3s ease;
          -moz-transition: all 0.3s ease;
          transition: all 0.3s ease;
        }
      </style>
    </head>
    <body>
      <div id="menu">
        <span class="cbp-spmenu cbp-spmenu-vertical cbp-spmenu-right" id="cbp-spmenu-s1">
          <h4>Avinash</h4>
        </span>
      </div>
      <div id="content">
        <section id="about">
          <button id="showRight">Show</button>
          <button id="showRight2">Hide</button>
        </section>
        <script>
          var menuRight = document.getElementById( 'cbp-spmenu-s1' ),
              showRight = document.getElementById( 'showRight' ),
              showRight2 = document.getElementById( 'showRight2' ),
              content = document.getElementById( 'avi' ),
              menu = document.getElementById( 'menu' ),
              body = document.body;
    
          showRight.onclick = function() {
            classie.add(this,"active");
            menuRight.style.right = '0px';
            content.style.opacity = '0.5';
            body.style.display = 'block';
          };
    
          showRight2.onclick = function() {
            if (classie.has(showRight,"active")) {
              menuRight.style.right = '-400px';
              classie.remove(showRight,"active");
              content.style.opacity = '1';
            } 
          };
        </script>
      </div>
    </body>
    </html>
    

2 个答案:

答案 0 :(得分:1)

在我看来,你可以创建一个覆盖整个网站的div,除了侧边栏

将这个div放在你的身体标签之后:

<div class="overlay"></div>

在你的css中:

body{
  overflow-y: hidden;
}

.overlay{
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 5000px;
  z-index: -1;
}

然后使用您的javascript将该div的z-index值更改为9999或其他任何内容。

更新:将css中的侧边栏z-index设置为高于此新值

可能不理想,但如果你没有得到更好的答案,请考虑一下。

答案 1 :(得分:0)

您应该添加叠加块。

<div class="overlay"></div>

.overlay {
  position: fixed;
  width: 100%;
  height: 100%;
  z-index: 999; /* sidebar must have z-index > 999 */
  background: white;
  opacity: 0; /* or background set to rgba(255, 255, 255, 0); */
}