Поскольку вы используете Vue, я бы использовал вычисленные для элементов по столбцам. Таким образом, когда элементы или columnCount меняются, вам не нужно беспокоиться о повторном запуске чего-либо самостоятельно.
Вы можете сделать что-то вроде:
data () {
return {
columnCount: 2,
items: [],
}
},
created () {
// You should debounce this callback.
window.addEvenetListener('resize', this.updateColumnCount)
this.updateColumnCount()
},
destroyed () {
window.removeEventListener('resize', this.updateColumnCount)
},
methods: {
updateColumnCount () {
// updat the columnCount here like: this.columnCount = 2
},
},
computed: {
itemsByColumn () {
return this.items.reduce((columns, item, index) => {
const columnNumber = index % this.columnCount
if (!columns[columnNumber]) {
columns[columnNumber] = []
}
columns[columnNumber].push(item)
return columns
})
},
},
Затем в вашем шаблоне вы можете сделать так:
<div class="flex">
<div class="column" v-for="(column, index) in itemsByColumn" :key="index">
<div class="item" v-for="item in column" :key="item.id">
{{ item.name }}
</div>
</div>
</div>
Этот код не тестировался, но в большинстве случаев он вам нужен.