【问题标题】:Instead of using Fontawesome Unicode, how can we use Fontawesome classes to create Accordions with icons?除了使用 Fontawesome Unicode,我们如何使用 Fontawesome 类来创建带有图标的手风琴?
【发布时间】:2019-09-11 22:07:14
【问题描述】:

目前我有一个可以展开和折叠的手风琴:https://jsfiddle.net/cliffeee/a5uxgkmt/15/

我想使用 fontawesome 为手风琴创建图标。现在,我正在使用 Fontawesome unicodes(f067 , \f068)。但是,我想使用 Fontawesome 类,例如: https://fontawesome.com/icons/plus?style=solid
https://fontawesome.com/icons/minus?style=solid

我想知道在我的 jquery 或 cshtml 中哪里可以添加 fontawesome 类?

<i class="fas fa-plus" /i>
<i class="fas fa-minus" /i>

【问题讨论】:

  • 您所做的就是 FontAwesome 在幕后所做的一切。为了实现您正在寻找的内容,您必须将 CSS 合并到一个文件中并引用您的 FA 类,使用 LESS 或 SASS 会更容易。否则,您将不得不在 JS 中执行此操作。您对使用 unicode 有什么顾虑?
  • 那么你可能不得不像下面提供的答案那样走 JS 路线。如果你想用纯 CSS 做,那么坚持你所拥有的,并为你想要使用的 FA 的特定权重等添加其余的样式。
  • 使用 unicode 的问题在于,Solid 和 PRO 图标的 unicode 是一样的。例如:Solid plus:fontawesome.com/icons/plus?style=solidRegular plus:fontawesome.com/icons/plus?style=regular这两个都有相同的unicode(f067),但我想使用Regular PRO,但我得到的是Solid icon。
  • 感谢@Mischa 指出这一点。我想我已经尝试过修改字体粗细,但没有奏效。我会再试一次。

标签: javascript jquery css font-awesome


【解决方案1】:

var coll = document.getElementsByClassName("accordion-toggle");
for (var i = 0; i < coll.length; i++) {
  coll[i].addEventListener("click", function(evnt) {
  	
    const currClassList = evnt.target.classList;
    if (currClassList.contains('collapsed')) {
        evnt.target.classList.remove("collapsed");
        evnt.target.querySelector('.fa').classList.remove("fa-minus");
        evnt.target.querySelector('.fa').classList.add("fa-plus");
        var content = evnt.target.nextElementSibling;
        content.style.maxHeight = null;
    } else {
      for (var j = 0; j < coll.length; j++) {
           coll[j].classList.remove("collapsed")
           coll[j].nextElementSibling.style.maxHeight = null;
      }
      this.classList.toggle("collapsed");
              evnt.target.querySelector('.fa').classList.remove("fa-plus");
        evnt.target.querySelector('.fa').classList.add("fa-minus");
      var content = this.nextElementSibling;
      if (content.style.maxHeight){
        content.style.maxHeight = null;
      } else {
        content.style.maxHeight = content.scrollHeight + "px";
      }
    }
  });
}
.accordion-toggle {
  background-color: #777;
  color: white;
  cursor: pointer;
  padding: 18px;
  width: calc(100% - 18px);
  border: none;
  text-align: left;
  outline: none;
  font-size: 15px;
}

.collapsed, .accordion-toggle:hover {
  background-color: #555;
}


.collapse {
  padding: 0 18px;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease-out;
  background-color: #f1f1f1;
}

.container {
  max-width:100%;
}
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="container">


<h2 class="accordion-toggle">Open Collapsible<i class="fa fa-plus pull-right"></i></h2>
<div id="anyId" class="collapse">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>

<h2 class="accordion-toggle">Open Section 1<i class="fa fa-plus pull-right"></i></h2>
<div class="collapse">
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>

</div>

【讨论】:

  • 我运行了您的代码 sn-p 并注意到折叠手风琴时图标无法正确切换。例如,如果我展开手风琴 1,然后展开手风琴 2,手风琴 1 会折叠,但图标仍为减号。
  • 啊好的....是的,我并没有真正详细阅读您的代码....我只是搜索了折叠折叠的点并添加了切换“fa-plus”“fa-减号”,但我认为您可以从这里开始自己解决剩下的问题……顺便说一句。您不需要在这里重新发明轮子,那里有许多可折叠/手风琴组件的好解决方案。我认为最受欢迎的是引导程序:getbootstrap.com
猜你喜欢
  • 2020-07-21
  • 2019-11-27
  • 2021-03-27
  • 2018-06-16
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
相关资源
最近更新 更多