Skip to content

Commit 1ef796b

Browse files
committed
fix: duplicate active views
1 parent 86d0d07 commit 1ef796b

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

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

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,6 @@ export default {
330330
if (!fake) {
331331
view.nr.used = false
332332
view.position = -9999
333-
this.$_views.delete(view.nr.key)
334333
}
335334
},
336335
@@ -534,12 +533,10 @@ export default {
534533
}
535534
536535
let unusedPool = unusedViews.get(type)
536+
let newlyUsedView = false
537537
538538
// No view assigned to item
539539
if (!view) {
540-
if (i === items.length - 1) this.$emit('scroll-end')
541-
if (i === 0) this.$emit('scroll-start')
542-
543540
type = item[typeField]
544541
545542
if (continuous) {
@@ -564,22 +561,33 @@ export default {
564561
view = unusedPool[v]
565562
unusedIndex.set(type, v + 1)
566563
}
564+
565+
// Assign view to item
566+
views.delete(view.nr.key)
567+
view.item = item
568+
view.nr.used = true
569+
view.nr.index = i
570+
view.nr.key = key
571+
view.nr.type = type
572+
views.set(key, view)
573+
574+
newlyUsedView = true
567575
} else {
568576
// View already assigned to item
569-
if (unusedPool) {
570-
const index = unusedPool.indexOf(view)
571-
if (index !== -1) unusedPool.splice(index, 1)
577+
if (!view.nr.used) {
578+
view.nr.used = true
579+
newlyUsedView = true
580+
if (unusedPool) {
581+
const index = unusedPool.indexOf(view)
582+
if (index !== -1) unusedPool.splice(index, 1)
583+
}
572584
}
573585
}
574586
575-
// Assign view to item
576-
views.delete(view.nr.key)
577-
view.item = item
578-
view.nr.used = true
579-
view.nr.index = i
580-
view.nr.key = key
581-
view.nr.type = type
582-
views.set(key, view)
587+
if (newlyUsedView) {
588+
if (i === items.length - 1) this.$emit('scroll-end')
589+
if (i === 0) this.$emit('scroll-start')
590+
}
583591
584592
// Update position
585593
if (itemSize === null) {

0 commit comments

Comments
 (0)