如何同步多个UIKit手风琴

时间:2019-03-03 10:23:52

标签: javascript vue.js uikit getuikit

我正在表行内动态呈现UIKit手风琴,每个手风琴仅包含一个子元素(li)。如何同步这些手风琴,以便其中一个打开时其他手风琴合拢?就像选项multiple: false一样。这是Vue应用(如果您可以提供更具体的答案)。

2 个答案:

答案 0 :(得分:1)

此答案更好,性能更高

i是循环的索引。
prevAccordionIndex在Vue实例数据中定义,最初设置为null。它用于保存先前(最后)打开的手风琴的索引,因此无需像先前的答案那样遍历$refs来查找打开的手风琴。

所有手风琴最初都被折叠(关闭)。

methods: {
    handleAccordionShow(index) {
        if (this.prevAccordionIndex !== null) {
            this.$uikit.accordion(this.$refs.categoryAccordion[this.prevAccordionIndex]).toggle(0, false)
            this.prevAccordionIndex = index
        } else {
            this.prevAccordionIndex = index
        }
    },
    handleAccordionHide(index) {
        this.prevAccordionIndex = this.prevAccordionIndex === index ? null : index
    }
}
<ul ref="categoryAccordion" @beforeshow="handleAccordionShow(i)" @beforehide="handleAccordionHide(i)" uk-accordion>
  <li>...</li>
</ul>

答案 1 :(得分:0)

这是我可以解决的方法:

i是循环的索引

toggleAccordion(i) {
  for (let j = 0; j < this.$refs.categoryAccordion.length; j++) {
    if (j === i) {
      continue
    }
    if (this.$refs.categoryAccordion[j].classList.contains('uk-open')) {
      this.uikit.accordion(this.$refs.categoryAccordion[j].parentNode).toggle(0, false)
    }
  }
}
<ul @show="toggleAccordion(i)" uk-accordion>
  <li ref="categoryAccordion">
    ...
  </li>
</ul>