I want to load more artworks if the user scrolls down. Like an infinite scroller. I use VueUse to achieve that and want to use .slice()
on my vuex computed store to increment 3 more works each time if I come closer to the bottom of the Dom Element.
The first 3 works load and everything seams fine, but if I scroll down nothing more loads. The sliceNumber
didn't increment and no errors appear. Seams like the useInfiniteScroll()
function don't trigger any event.
Did someone see the issue? Thanks for any help in advance
Here my Vue Component
<template>
<div class="Section Explore">
<ExploreBanner />
<div
ref="workDom"
class="WorkList flex_c_h flex_wrap gap2">
<Suspense>
<WorkThumbnail
v-for="(work, index) in works"
:key="work"
:work="work"
:index="index" />
<template #fallback>
<div>
Loading...
</div>
</template>
</Suspense>
</div>
</div>
</template>
<script>
import {
ref
} from 'vue'
import WorkThumbnail from '@/components/Explore/WorkThumbnail.vue'
import ExploreBanner from '@/components/Explore/ExploreBanner.vue'
import {
useInfiniteScroll
} from '@vueuse/core'
export default {
name: 'Explore',
setup() {
const workDom = ref(null)
const sliceNumber = ref(3)
console.log(sliceNumber.value)
useInfiniteScroll(
workDom,
() => {
sliceNumber.value += 3
console.log(sliceNumber.value)
}, {
distance: 10
}
)
return {
workDom,
sliceNumber
}
},
components: {
WorkThumbnail,
ExploreBanner,
},
computed: {
works() {
return this.$store.state.works.slice(0, this.sliceNumber)
}
},
mounted() {
document.documentElement.style.setProperty('--color_p', '#a25aff');
document.documentElement.style.setProperty('--color_bg', '57, 35, 66');
},
}
</script>
I tried
useInfiniteScroll
composable with Vue 3 and it seems working as expected.Stackblitz demo here (working only in chrome browser due to cors issue)
Note that container is made scrollable with height 700px and initial 3 images overflow vertically so that you can scroll down.
When distance between container bottom and last image's bottom became smaller than given
10
, the composable successfully runsloadData
callback to get more urls that will be appended, etc.