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

时间:2016-01-06 18:13:17

标签: javascript jquery html css

在我的应用程序中,我有2个切换按钮和3个面板。 Button1 面板1 2 之间切换。并且 button2 面板1 3 之间切换。我可以通过将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>
&#13;
&#13;
&#13;

如您所见,每个面板都有一些内部div。第一次,它显示了所有内部div。但是一旦你在面板之间切换,它就不会显示内部的div。我试图仅消除面板div,但它似乎是为该面板中的每个div做的。

所以任何想法都要让它工作,所以在面板之间切换不会影响内部div?

1 个答案:

答案 0 :(得分:2)

您需要以这种方式更改您的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。