如何单击以展开和调整其他div的大小

时间:2015-11-27 21:09:18

标签: javascript jquery animation jquery-animate

在我的网页上,我试图让它在用户按下" Link 1"它会触发div #section1的动画扩展。如果有任何先前打开的div,他们会隐藏,先关闭然后展开#section1

当展开的#section1处于打开状态时,点击"链接1"可以隐藏#section1。

同样的一致行为适用于" Link 2"与#section2和" Link3"与#section3

请参阅animated gif of desired behavior

有人可以帮我吗?

HTML:



<div id="navbar">
   <ul>
      <li><a href="#section1">Link 1</a></li>
      <li><a href="#section2">Link 2</a></li>
      <li><a href="#section3">Link 3</a></li>
   </ul>
</div>

<div class="container">
   <div id="section1"></div>
   <div id="section2"></div>
   <div id="section3"></div>
</div>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:0)

<script type="text/javascript">
    $('#navbar a').bind('click', function(){
        var href = $(this).attr('href');
        $('.container div').removeClass('active');
        $('.container '+ href).addClass('active');
    });
</script>

答案 1 :(得分:0)

1st:不要忘记包含Jquery

第二:只需使用此代码

<script>
    $('#navbar > ul > li > a').on('click', function(e){
        e.preventDefault();
        var href = $(this).attr('href');
        $('.container div[id^="section"]:not('+href+')').slideUp();
        $('.container '+ href).slideToggle();
    });
</script>

Working Demo

答案 2 :(得分:0)

嗯,您需要完成3项任务:

  1. 更改内容部分
  2. 可点击导航项
  3. 动画效果
  4. 让我们开始更改内容部分。我建议你添加类似.section的类。最简单的方法是使用display属性:

    .section {display: none}
    .section.active {display: block}
    

    然后你需要一些JS来点击导航项目:

    $("#navbar").on("click", "a", function(e) {
        // cross browser href parsing
        var $tab = $("#" + e.currentTarget.href.split("#")[1]);
        // toggle one tab's visibility and close others if need
        $tab.toggleClass("active").siblings().removeClass("active");
        // prevent default
        return !1
    })
    

    最后一部分是动画效果。你需要使用css过渡:

    .section {transition: all 0.5s}
    

    这是一个非常简单的示例 - http://codepen.io/korzhik/pen/epwaEJ

    顺便说一下,您可以使用CSS转换属性来设置“幻灯片”效果。它有更好的表现。

答案 3 :(得分:0)

你不需要JQuery

var links = document.querySelectorAll('#navbar a');

links.forEach(function(link){
     var sectionId = link.href;
     var section = document.querySelector(sectionId)
     section.addEventListner('click', function(){
         var isOpen = this.classList.contains('slide-in');

         this.setAttribute('class', isOpen ? 'slide-out' : 'slide-in');
     }) 
})

 .container > div{
    position: absolute;
    width: 100px;
    height: 100px;
    background: blue;
    transform: translateX(-100%);
    -webkit-transform: translateX(-100%);
}

.slide-in {
    animation: slide-in 0.5s forwards;
    -webkit-animation: slide-in 0.5s forwards;
}

.slide-out {
    animation: slide-out 0.5s forwards;
    -webkit-animation: slide-out 0.5s forwards;
}

@keyframes slide-in {
    100% { transform: translateX(0%); }
}

@-webkit-keyframes slide-in {
    100% { -webkit-transform: translateX(0%); }
}

@keyframes slide-out {
    0% { transform: translateX(0%); }
    100% { transform: translateX(-100%); }
}

@-webkit-keyframes slide-out {
    0% { -webkit-transform: translateX(0%); }
    100% { -webkit-transform: translateX(-100%); }
}