【问题标题】:How can I cycle through an accordions content using external buttons/controls?如何使用外部按钮/控件循环浏览手风琴内容?
【发布时间】:2016-04-11 09:44:22
【问题描述】:

所以我在这里有一个简单的手风琴 - https://jsfiddle.net/fLLbkxcf/ - 它使用 slideToggle 来显示和隐藏手风琴内容。

$(".accordion_trigger").click(function () {
  $(this).next(".accordion_holder").slideToggle("slow").siblings(".accordion_holder:visible").slideUp("slow");
  $(this).toggleClass("current");
  $(this).siblings(".accordion_trigger").removeClass("current");
});

但是,我在手风琴下方有一些按钮(下一个、上一个),我希望能够在手风琴的不同状态之间循环。

有没有人知道我应该如何解决这个问题,或者可以指出正确的方向?

【问题讨论】:

  • 按钮应该像访问标签键。然后它就可以工作了。
  • 只需使用.next()/.prev() 来获取类current 的元素的下一个/上一个兄弟。如果这没有返回一个元素,那么您知道您需要取而代之的是第一个/最后一个元素。
  • 嘿@CBroe 这听起来正是我想做的。这对我来说是有道理的,但在谈到 js 时我有点新手。你能告诉我如何执行它吗?再次感谢!

标签: javascript jquery css accordion jquery-ui-accordion


【解决方案1】:

您可以有一个点击处理程序,您可以在其中找到当前元素,然后根据是否显示上一个/下一个元素进行导航

$(".accordion_trigger").click(function() {
  $(this).next(".accordion_holder").slideToggle("slow").siblings(".accordion_holder:visible").slideUp("slow");
  $(this).toggleClass("current");
  $(this).siblings(".accordion_trigger").removeClass("current");
});
$('.acc-ext-trigger').click(function() {
  var $curr = $(".accordion_trigger.current"),
    dir = $(this).data('dir');
  var $next = $curr[dir == -1 ? 'prevAll' : 'nextAll']('.accordion_trigger');
  $next = $next.length ? $next : $('.accordion_trigger')[dir == -1 ? 'last' : 'first']();
  $next.triggerHandler('click');
});
.accordion_holder {
  display: none;
  background: #dddddd;
  border-bottom: 1px solid black;
}
.accordion_trigger {
  width: 100%;
  background: grey;
  border-bottom: 1px solid black;
}
.accordion_trigger p,
.accordion_holder p {
  margin: 0;
}
/* Clearfix */

.clearfix:after {
  visibility: hidden;
  display: block;
  font-size: 0;
  content: " ";
  clear: both;
  height: 0;
}
.clearfix {
  display: inline-block;
}
.clearfix {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Accordion 1 -->
<div class="accordion_trigger">
  <p class="leadin">Accordion Title 1</p>
</div>

<div class="accordion_holder">
  <div class="clearfix">
    <p>This is a test</p>
  </div>
</div>

<!-- Accordion 2 -->
<div class="accordion_trigger">
  <p class="leadin">Accordion Title 2</p>
</div>

<div class="accordion_holder">
  <div class="clearfix">
    <p>This is a test</p>
  </div>
</div>

<!-- Accordion 3 -->
<div class="accordion_trigger">
  <p class="leadin">Accordion Title 2</p>
</div>

<div class="accordion_holder">
  <div class="clearfix">
    <p>This is a test</p>
  </div>
</div>

<!-- Accordion controls -->
<a href="#" class="acc-ext-trigger" data-dir="1">Next</a>
<a href="#" class="acc-ext-trigger" data-dir="-1">Previous</a>

【讨论】:

  • 嘿@ArunPJohny。非常感谢您的回答!我想知道你能不能帮我完成一项额外的任务?除了上一个/下一个按钮,我还想显示打开的相应手风琴的图像。你知道我如何显示/隐藏这个图像/div 持有者吗? jsfiddle.net/1a64Lyk6/6
  • 感谢您这么快回复!我认为我在解释我所追求的方面做得不好。对不起!所以基本上,每个手风琴持有者都会有内容(目前是这样),并且除了这些内容之外,它还会有一个与之相关的图像。 So when an accordion element is selected I want to show the content and a corresponding image - ie - When 'Accordion title 1' is selected it will show the content within the 'Accordion title 1' and an image ('accordion image 1')它将位于手风琴旁边。我希望这是有道理的。如果没有,请告诉我。谢谢
  • 我真的不能感谢你!正是我所追求的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2013-01-20
  • 2019-02-28
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多