시리즈 관리 - scroll infinite loading으로 paging 처리

This commit is contained in:
Yu Sung 2024-08-14 15:43:40 +09:00
parent 65276f5281
commit d459d42a60
2 changed files with 32 additions and 7 deletions

View File

@ -38,4 +38,12 @@
} }
} }
} }
html::-webkit-scrollbar, body::-webkit-scrollbar {
overflow-y: hidden;
}
html, body {
overflow-y: hidden;
}
</style> </style>

View File

@ -22,7 +22,11 @@
</v-btn> </v-btn>
</v-col> </v-col>
</v-row> </v-row>
<v-row> <v-row
ref="scroll_container"
class="scroll_container"
@scroll="onScroll"
>
<v-col <v-col
v-for="(item, i) in series_list" v-for="(item, i) in series_list"
:key="i" :key="i"
@ -378,6 +382,14 @@ export default {
}, },
methods: { methods: {
async onScroll() {
const scrollContainer = this.$refs.scroll_container;
const threshold = scrollContainer.scrollHeight - scrollContainer.clientHeight;
if (scrollContainer.scrollTop >= threshold - 10 && this.total_page >= this.page) {
await this.getSeriesList();
}
},
imageAdd(payload) { imageAdd(payload) {
const file = payload; const file = payload;
if (file) { if (file) {
@ -486,7 +498,6 @@ export default {
}, },
async getSeriesGenreList() { async getSeriesGenreList() {
this.is_loading = true
try { try {
const res = await api.getGenreList() const res = await api.getGenreList()
if (res.status === 200 && res.data.success === true) { if (res.status === 200 && res.data.success === true) {
@ -496,23 +507,24 @@ export default {
} else { } else {
this.notifyError(res.data.message || '알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.') this.notifyError(res.data.message || '알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
} }
this.is_loading = false
} catch (e) { } catch (e) {
this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.') this.notifyError('알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.')
this.is_loading = false
} }
}, },
async getSeriesList() { async getSeriesList() {
if (this.is_loading) return;
this.is_loading = true this.is_loading = true
try { try {
const res = await api.getSeriesList(this.page) const res = await api.getSeriesList(this.page)
if (res.status === 200 && res.data.success === true) { if (res.status === 200 && res.data.success === true) {
const data = res.data.data const data = res.data.data
const total_page = Math.ceil(data.totalCount / 10)
const total_page = Math.ceil(data.totalCount / 20) if (this.page === 1) this.series_list.length = 0;
this.series_list = data.items this.page += 1;
this.series_list.push(...data.items);
if (total_page <= 0) if (total_page <= 0)
this.total_page = 1 this.total_page = 1
@ -665,6 +677,11 @@ export default {
</script> </script>
<style scoped> <style scoped>
.scroll_container {
height: 100vh;
overflow-y: auto;
}
.image-select label { .image-select label {
display: inline-block; display: inline-block;
padding: 10px 20px; padding: 10px 20px;