使用animate.css和jQuery切换多个div和多个按钮

3

我有三个不同的按钮,每个按钮都可以切换到相应的div。现在有两个需求:

  1. 当相应的 .app-div 显示时,在 .app-icon 按钮上添加类,以便在活动状态下添加背景颜色。
  2. 在打开和关闭同一个 .app-div 时添加 animate.css 效果,使得当 div 消失时它能够向下滑动而不是突然消失。

HTML:

<a href="#" class="app-icon"><i class="fa fa-calculator" aria-hidden="true"></i></a>
<a href="#" class="app-icon"><i class="fa fa-sun-o" aria-hidden="true"></i></a>
<a href="#" class="app-icon"><i class="fa fa-rss" aria-hidden="true"></i></a>

<div class="app-div">
content div 1
</div>

<div class="app-div">
content div 2
</div>

<div class="app-div">
content div 3
</div>

jQuery:

$('.app-icon').click(function() {
  var index = $(this).index();
  $('.app-div').eq(index).toggle().siblings('.app-div').hide();
});

//animate.css effect
$('.app-div').addClass('animated fadeInUp');

这是我目前的内容:https://jsfiddle.net/frshjb373/a5osx7y6/3/
4个回答

2

一种处理方法是使用if语句检查所点击的图标是否实际处于活动状态,如下所示:

$('.app-icon').click(function() {
  var index = $(this).index();
  if($(this).hasClass('active')) {
     $(this).removeClass('active');
     $('.app-div').eq(index).addClass('fadeOutDown')
  } else {
     $('.app-icon').removeClass('active');
     $(this).addClass('active')
     $('.app-div').hide().eq(index).show().removeClass('fadeOutDown')
  }
});

更新演示

该演示已经进行了更新。

1
非常好!正是我所需要的!运行得很好。 - frshjb373

2

不确定这是否符合您的要求(只使用animate.css很难制作“无故障”切换)。

$('.app-icon').click(function() {
  $('.app-icon.active').not(this).removeClass('active');
  var index = $(this).toggleClass('active').index();
  $('.app-div').eq(index).toggleClass('fadeInUp fadeOutDown').show().siblings('.app-div').removeClass('fadeInUp').addClass('fadeOutDown').hide();
});

并为.active类应用样式

.app-icon.active{ color:green; }

JSFiddle


1
  1. "addClass"和"removeClass"(最后两句话)
  2. 我认为".hide()"是问题所在,但你还需要添加和删除"class"来实现"fadeOutDown"效果。

试试这个:

$('.app-icon').click(function() {
  var index = $(this).index();
  if($('.app-div').eq(index).is(":visible"))
  {
    $('.app-div').eq(index).addClass('fadeOutDown').slideUp();
  }
  else
  {
    $('.app-div').eq(index).removeClass('fadeOutDown').slideDown().siblings('.app-div').slideUp();
  }
  $('.app-icon.current').removeClass("current");
  $(this).addClass("current");
});

编辑: 要通过点击自身来删除当前类,您应该将addClass(“current”)移动到else语句中。 这里是一个工作演示https://jsfiddle.net/a5osx7y6/5/


1
这是Artur回复的完美结束。
HTML
<a href="#" class="app-icon"><i class="fa fa-calculator" aria-hidden="true"></i></a>
<a href="#" class="app-icon"><i class="fa fa-sun-o" aria-hidden="true"></i></a>
<a href="#" class="app-icon"><i class="fa fa-rss" aria-hidden="true"></i></a>

<div style="position: relative">
    <div class="app-div">
    content div 1
    </div>

    <div class="app-div">
    content div 2
    </div>

    <div class="app-div">
    content div 3
    </div>
</div>

CSS

.app-div {display: none; position: absolute; top: 0; left: 0;}
.app-icon .fa {transition: background-color 0.5s ease;}
.app-icon .fa:hover {background: #ccc;}
.app-icon.active {background: #CD87BA;}

JavaScript

$('.app-icon').click(function() {
  $('.app-icon.active').not(this).removeClass('active');
  var index = $(this).toggleClass('active').index();
  $('.app-div').eq(index).toggleClass('fadeInUp fadeOutDown').show().siblings('.app-div').removeClass('fadeInUp').addClass('fadeOutDown');
});

//animate.css effect
$('.app-div').addClass('animated fadeOutDown');

工作中的JSFiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接