如何同步多个 UIKit 手风琴
how to sync multiple UIKit accordions
我在 table 行内动态渲染 UIKit 手风琴,每一行只包含一个子 (li
) 元素。我怎样才能同步这些手风琴,以便当其中一个打开时,其他手风琴折叠起来?就像选项 multiple: false
一样。这是一个 Vue 应用程序(如果您可以提供更具体的答案)。
我是这样解决的:
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>
这个答案更好,性能更高
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>
我在 table 行内动态渲染 UIKit 手风琴,每一行只包含一个子 (li
) 元素。我怎样才能同步这些手风琴,以便当其中一个打开时,其他手风琴折叠起来?就像选项 multiple: false
一样。这是一个 Vue 应用程序(如果您可以提供更具体的答案)。
我是这样解决的:
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>
这个答案更好,性能更高
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>