提问者:小点点

下拉菜单滑动切换执行两次


我正在尝试做一个下拉菜单,如果你已经打开了一个菜单,点击另一个菜单,第一个将关闭。 我尝试用SlidetToggle+slideDown和SlideUp来实现这一点。

它可以工作,但是菜单的内容被“切换”了两次。 而且它的过渡并不像我想的那么顺利。

下面是代码:

<div class="section-four-wrap">
  <div class="section-two-text-fields">
    <div class="description-container container-1">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        Text
      </span>
    </div>
    <div class="description-container container-2">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        value
      </span>
    </div>
    <div class="description-container container-3">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        value
      </span>
    </div>
  </div>

null

.h3-default:after {
  content:'';
  display:block;
  width:100vw;
  height:1px;
  background:black;
}


.text-placeholder{
  display:none;
}


$(function () {

    $(".section-two-text-fields .description-container h3").click(function() {


        $(this).next().slideToggle();

        if($('.description-container .text-placeholder:visible').length > 1) {
            $('.description-container .text-placeholder:visible').slideUp();
            $(this).next().slideDown();
        }
    }); 
});

https://jsfiddle.net/bg68jne1/

谢啦!


共1个答案

匿名用户

您可能不需要检查长度。 首先SlideUp()所有可见元素,然后SlideToggle()下一个元素。 还可以将值以毫秒的形式传递给函数。

您可以尝试以下方式:

null

$(function () {    
  $(".section-two-text-fields .description-container h3").click(function() {
    $('.description-container .text-placeholder:visible').slideUp(500);
    $(this).next().slideToggle(1000);
  }); 
});
.h3-default:after {
  content:'';
  display:block;
  width:100vw;
  height:1px;
  background:black;
}


.text-placeholder{
  display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="section-four-wrap">
  <div class="section-two-text-fields">
    <div class="description-container container-1">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        Text
      </span>
    </div>
    <div class="description-container container-2">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        value
      </span>
    </div>
    <div class="description-container container-3">
      <h3 class="h3-default">
        <b>Heading</b>
      </h3>
      <span class="text-placeholder">
        value
      </span>
    </div>
  </div>
</div>