Skip to content

Commit 40f58b3

Browse files
committed
fix: improved dynamic scroller resize observer logic
1 parent 395bbfb commit 40f58b3

File tree

2 files changed

+17
-19
lines changed

2 files changed

+17
-19
lines changed

packages/vue-virtual-scroller/src/components/DynamicScroller.vue

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,9 @@ export default {
5353
return
5454
}
5555
for (const entry of entries) {
56-
if (entry.target) {
57-
const event = new CustomEvent(
58-
'resize',
59-
{
60-
detail: {
61-
contentRect: entry.contentRect,
62-
},
63-
},
64-
)
65-
entry.target.dispatchEvent(event)
56+
if (entry.target?.$_vs_onResize) {
57+
const resizeObserverSize = entry.borderBoxSize[0]
58+
entry.target.$_vs_onResize(entry.target.$_vs_id, resizeObserverSize.inlineSize, resizeObserverSize.blockSize)
6659
}
6760
}
6861
})

packages/vue-virtual-scroller/src/components/DynamicScrollerItem.vue

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ export default {
7575
watchData: 'updateWatchData',
7676
7777
id () {
78+
this.$el.$_vs_id = this.id
7879
if (!this.size) {
7980
this.onDataUpdate()
8081
}
@@ -124,7 +125,9 @@ export default {
124125
125126
mounted () {
126127
if (this.vscrollData.active) {
127-
this.updateSize()
128+
if (!this.vscrollResizeObserver) {
129+
this.updateSize()
130+
}
128131
this.observeSize()
129132
}
130133
},
@@ -201,20 +204,22 @@ export default {
201204
},
202205
203206
observeSize () {
204-
if (!this.vscrollResizeObserver || !this.$el.parentNode) return
205-
this.vscrollResizeObserver.observe(this.$el.parentNode)
206-
this.$el.parentNode.addEventListener('resize', this.onResize)
207+
if (!this.vscrollResizeObserver) return
208+
this.vscrollResizeObserver.observe(this.$el)
209+
this.$el.$_vs_id = this.id
210+
this.$el.$_vs_onResize = this.onResize
207211
},
208212
209213
unobserveSize () {
210214
if (!this.vscrollResizeObserver) return
211-
this.vscrollResizeObserver.unobserve(this.$el.parentNode)
212-
this.$el.parentNode.removeEventListener('resize', this.onResize)
215+
this.vscrollResizeObserver.unobserve(this.$el)
216+
this.$el.$_vs_onResize = undefined
213217
},
214218
215-
onResize (event) {
216-
const { width, height } = event.detail.contentRect
217-
this.applySize(width, height)
219+
onResize (id, width, height) {
220+
if (this.id === id) {
221+
this.applySize(width, height)
222+
}
218223
},
219224
},
220225

0 commit comments

Comments
 (0)