javascript - 折叠具有初始状态的面板

标签 javascript jquery html css twitter-bootstrap

我试图让我的折叠面板在折叠(或不折叠)的初始状态下工作。没有初始状态功能,它工作正常,但当我介绍它时,初始点击是愚蠢的,并且指示器图标是倒置的。我敢肯定这只是一个我没有看清楚的逻辑难题,但事实是我被难住了。

使用 jQuery 和 Bootstrap。出于这篇文章的目的,代码略有修改,这就是为什么它有自己的功能(通常它是 TypeScript 的导出功能,但在这里不重要)并且图标使用图标字体所以我替换了一个'^ ' 为简单起见。

明确地说,“图标”应该在面板折叠时指向下方,在展开时指向上方,指示单击它时会发生什么操作(而不是指示其当前状态(这在我的工程师之间引起了一些混淆)和设计师,哈哈!)我需要能够将“折叠”类应用于目标,以便它的初始状态是折叠的。

http://codepen.io/sinrise/pen/eBoNPE

HTML

<div class="container" style="padding-top: 30px;">
  <div class="row">
    <div class="col-md-12">
      <div class="panel panel-default">
        <div class="panel-heading collapse-header" data-target="#test-panel1">Heading</div>
        <div class="panel-body collapsed" id="test-panel1">
          <p>some content</p>
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading collapse-header" data-target="#test-panel2">Heading</div>
        <div class="panel-body" id="test-panel2">
          <p>some content</p>
        </div>
      </div>
    </div>  
  </div>
</div>

CSS

.collapse-header + .collapsed { display: none; }

.collapse-header {
    position: relative;
    &:hover { cursor: pointer; }
    &:after {
        position: absolute;
        font-family: "Sans-serif";
        content: "^";
        transform: rotateZ(0deg);
        right: 15px;
        transition: all 0.5s linear;
    }
    &.rotate-icon {
        &:after {
            transform: rotateZ(180deg);
            transition: all 0.5s linear;
        }
    }
}

JS/jQuery

function setCollapsableHeaders() {
    $.each($(".collapse-header"), function () {
        var $this = $(this);
        var tar = $($this.attr("data-target"));
        $this.on("click", function () {
            $this.toggleClass("rotate-icon");
            tar.toggleClass("collapsed");
            tar.animate({
                height: "toggle",
                paddingTop: "toggle",
                paddingBottom: "toggle"
            }, 500, function () {
            });
        });
    });
};

$(function(){
  setCollapsableHeaders();
});

最佳答案

如您所料,这只是对代码的一个小改动。 :)

这是一个工作的(除了图标,你应该放置任何你想要的图标) http://codepen.io/anon/pen/ZBZbEa

这里是整个片段供引用

function setCollapsableHeaders() {
$.each($(".collapse-header"), function () {
    var $this = $(this);
    var tar = $($this.attr("data-target"));
    $this.on("click", function () {
        $this.toggleClass("rotate-icon");
        //tar.toggleClass("collapsed");
        tar.animate({
            height: "toggle",
            paddingTop: "toggle",
            paddingBottom: "toggle"
        }, 500, function () {
        });
    });
});
};

$(function(){
      setCollapsableHeaders();
});

唯一改变的是这条注释行

//tar.toggleClass("collapsed");

因为一开始你搞乱了逻辑,然后用代码做了同样的事情,所以你的第一次点击实际上是设置了正确的类(添加或删除),然后后续点击就没问题了。

希望对你有帮助

关于javascript - 折叠具有初始状态的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41272037/

相关文章:

javascript - 如何在表格的每个单元格中放置一个不可见的输入

javascript - 将参数从 HTML 文件传递​​给 Javascript

javascript - 如何使用带有 jQ​​uery 的按钮将 PHP 变量添加到表单中?

javascript - 在 Javascript 中填充自定义绘制的形状

jquery - 用户显示/隐藏列后触发 jqGrid 的大小调整

javascript - jQuery slideToggle 添加空格

javascript - 如何判断 DOM 元素在当前视口(viewport)中是否可见?

javascript - bootstrapSwitch 未正确显示

javascript - 尝试从 Firefox 扩展将文本写入文件时 NS_ERROR_UNEXPECTED

javascript - 如何使用jquery删除onclick生成的多个div元素