向下滑动的标签不能按预期工作

时间:2015-11-13 22:37:14

标签: jquery tabs slidedown

我使用jQuery创建了一个基于自定义的选项卡。规则是,单击选项卡后,它将向内滑动fadeIn效果。如果您点击其他标签,则它不会slideUp,而是显示标签2中带有fadeIn效果的内容。如果再次单击选项卡2(已打开),则选项卡容器将向上滑动。

它第一次起作用,但是如果再次点击同一个标签(向上滑动后),则需要一些时间向下滑动,这也不顺畅。

我做错了什么?

  $(document).ready(function() {

    $('.tabs .col-3 a').click(function(e) { // Or bind to any other event you like, or call manually

      e.preventDefault();
      var hrefid = $(this).attr("href");
      var tabid = ($(this).attr("href")).replace('#', ''); // remove #         

      var getContent = $(hrefid).html();

      $('#maintabcontent').hide().html(getContent).fadeIn(1400);


      $('span.plus').text("+");
      var $t = $('.tab-container');

      if ($(this).parent().hasClass('active')) {
        $(this).find('span').text("+");
        $t.slideUp(function() {
          $('#maintabcontent').html('');
        });
        $(this).parent().removeClass('active');
      } else {

        $(this).find('span').text("-");
        $t.slideDown(600, function() {

        });
        if ($t.is(':visible')) {
          $('.col-3').removeClass('active');
          $(this).parent().addClass('active');
        }
      }

    });

  });
.container {
  margin: 0 auto;
  max-width: 1280px;
  overflow: hidden;
  position: relative;
}
.full-width {
  background: #dfdedb none repeat scroll 0 0;
  width: 100%;
}
.main-container {
  margin: 0 auto;
  max-width: 1220px;
}
.padding-top-bottom-small {
  padding-bottom: 1rem;
  padding-top: 1rem;
}
.text-center {
  text-align: center;
}
.col-3 {
  display: inline-block;
  max-width: 403px;
  overflow: hidden;
  position: relative;
  vertical-align: top;
  width: 32.5%;
}
.tabs .col-3 {
  border-right: 2px solid #ffffff;
  cursor: pointer;
}
.tab-container {
  background: #505050 none repeat scroll 0 0;
  display: none;
  position: relative;
}
.main-container {
  margin: 0 auto;
  max-width: 1220px;
}
.padding-top-bottom-big {
  padding-bottom: 2rem;
  padding-top: 2rem;
}
.tab-content {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="full-width container tabs">
  <div class="main-container">
    <div class="col-3 first text-center padding-top-bottom-small"> <a href="#tab-1"><h3 class="lato-reg mediumfontx4 orange">How to Sell <span class="deep-grey padding-left-tiny plus" data-tab="tab-1">+</span></h3></a>

    </div>
    <div class="col-3 second text-center padding-top-bottom-small"> <a href="#tab-2"><h3 class="lato-reg mediumfontx4 orange">Finance <span class="deep-grey padding-left-tiny plus" data-tab="tab-1">+</span></h3></a>

    </div>
    <div class="col-3 text-center padding-top-bottom-small"> <a href="#tab-3"><h3 class="lato-reg mediumfontx4 orange">Market Intelligence <span class="deep-grey padding-left-tiny plus" data-tab="tab-1">+</span></h3></a>

    </div>
  </div>
</div>
<div class="tab-container">
  <div class="main-container padding-top-bottom-big" id="maintabcontent"></div>
</div>
<div id="tab-1" class="tab-content">Tab Content 1</div>
<div id="tab-2" class="tab-content">Tab Content 2</div>
<div id="tab-3" class="tab-content">Tab Content 3</div>

View on JSFiddle

1 个答案:

答案 0 :(得分:1)

fadeIn()之前添加

$('#maintabcontent').hide().html(getContent).stop().fadeIn(1400);

这将停止任何正在运行的动画,并防止您遇到的急动。

stop()