如何创建切换按钮以在面板之间切换

How to create a toggle button to switch between panels

本文关键字:之间 按钮 何创建 创建      更新时间:2023-09-26

在我的应用程序中,我有2个切换按钮和3个面板按钮1在面板1和面板2之间切换。按钮2面板13之间切换。通过将display: none;属性赋予div面板,我可以使它在某种程度上发挥作用。但一旦它只为每个按钮工作一次,然后它将所有子div都设置为display: none;请看一下样品:

$(function () {
  $("button.panel2").on("click", function() {
    var visibleObj = $('.mainSection div:visible');
    if ($("div.panel2").css("display") == "none") {
      var inVisibleObj = $("div.panel2")
    }
    else {
      var inVisibleObj = $("div.panel1")
    }
    visibleObj.fadeOut(500, function() {
      inVisibleObj.fadeIn(500);
    })
  });
  
  
  $("button.panel3").on("click", function() {
    var visibleObj = $('.mainSection div:visible');
    if ($("div.panel3").css("display") == "none") {
      var inVisibleObj = $("div.panel3")
    }
    else {
      var inVisibleObj = $("div.panel1")
    }
    visibleObj.fadeOut(500, function() {
      inVisibleObj.fadeIn(500);
    })
  });
});
div.app {
  margin:50px auto;
  width: 400px;
  height: 400px;
  border-radius:10px;
  overflow: hidden;
  position: relative;
}
div.app > .blur {
  width: 100%;
  height: 100%;
  background: url(http://goo.gl/0VTd9W);
  -webkit-filter: blur(5px);
}
div.mainSection, div.dashboard{
  position: absolute;
  left: 0px;
  text-align:center;
  color:#fff;
  font-size:20px;
}
div.mainSection{
  width:100%;
  height:85%;
  background:rgba(0,0,0,0.5);
  top:0;
}
div.dashboard{
  width:100%;
  height:15%;
  background:rgba(255,0,0,0.5);
  bottom:0;
}
div.mainSection > .panel1,
div.mainSection > .panel2,
div.mainSection > .panel3 {
  width: 100%;
  Height: 100%;
  Background: rgba(0, 0, 0, 0.5);
  position: absolute;
  left: 0px;
  top: 0px;
}
div.mainSection > .panel3 > p{
  margin-top:80px;
}
.grid-button {
  background: none;
  border: none;
  padding: 3px;
  width: 100%;
}
.grid {
  display: inline-block;
  height: 4px;
  position: relative;
  width: 32px;
  transition: all 0.3s ease-in-out;
}
.grid:after, .grid:before {
  content: '';
  position: absolute;
  background-color: #FFF;
  display: inline-block;
  height: 4px;
  left: 0;
  width: 32px;
  transition: all 0.3s ease-in-out;
}
.grid.open {
  background-color: #FFF;
}
.grid.open:after {
  top: 10px;
}
.grid.open:before {
  top: -10px;
}
.grid.close {
  background-color: transparent;
  transform: scale(0.9);
}
.grid.close:after, .grid.close:before {
  top: 0;
  transform-origin: 50% 50%;
}
.grid.close:before {
  transform: rotate(135deg);
}
.grid.close:after {
  transform: rotate(45deg);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="app">
    <div class="blur"></div>
    <div class="mainSection">
        <div class="panel1">
          <div>panel1</div>
          <div>panel1</div>
          
        </div>
        <div class="panel2" style="display: none;">
          <div>panel2</div>
        </div>
        <div class="panel3" style="display: none;">
          <p>Panel3</p>
          <div>panel3</div>
          <div>panel3</div>
        </div>
    </div>
    <div class="dashboard">
        <button class="panel2">button1</button>
        <button class="panel3">button2</button>
    </div>
</div>

正如您所看到的,每个面板都有一些内部div。第一次,它显示了所有内部div。但一旦在面板之间切换,它就不会显示内部div。我试图只删除面板div,但似乎它对该面板中的每个div都这样做了。

那么,有什么想法可以让它继续工作,这样在面板之间切换就不会影响内部div吗?

您需要以这种方式更改您的javascript:

$(function () {
    $("button.panel2").on("click", function() {
        var visibleObj = $('.mainSection > div:visible');
        if ($("div.panel2").css("display") == "none") {
            var inVisibleObj = $("div.panel2")
        }
        else {
            var inVisibleObj = $("div.panel1")
        }
        visibleObj.fadeOut(500, function() {
            inVisibleObj.fadeIn(500);
        });
    });

    $("button.panel3").on("click", function() {
        var visibleObj = $('.mainSection > div:visible');
        if ($("div.panel3").css("display") == "none") {
            var inVisibleObj = $("div.panel3")
        }
        else {
            var inVisibleObj = $("div.panel1")
        }
        visibleObj.fadeOut(500, function() {
            inVisibleObj.fadeIn(500);
        })
    });
});

问题出在选择器$('.mainSection div:visible');中。这也选择了子div,当您尝试显示正确的面板时,子div将被隐藏。如果使用$('.mainSection > div:visible');,则只能得到直接的子div。