refs #1804 Add buffer for virtual scroll in sidebar

This commit is contained in:
AkiraFukushima 2020-10-27 16:32:29 +09:00
parent dc6f3664cb
commit 8004f7fa2b
4 changed files with 19 additions and 11 deletions

View File

@ -1,9 +1,9 @@
<template> <template>
<div class="tabs"> <div class="tabs" id="sidebar_tabs">
<el-tabs v-model="activeName" @tab-click="handleClick" stretch> <el-tabs v-model="activeName" @tab-click="handleClick" stretch>
<el-tab-pane label="Posts" name="posts"><Posts :account="account" /></el-tab-pane> <el-tab-pane label="Posts" name="posts"><Posts :account="account" :buffer="buffer" /></el-tab-pane>
<el-tab-pane label="Posts and replies" name="posts_and_replies"><PostsAndReplies :account="account" /></el-tab-pane> <el-tab-pane label="Posts and replies" name="posts_and_replies"><PostsAndReplies :account="account" :buffer="buffer" /></el-tab-pane>
<el-tab-pane label="Media" name="media"><Media :account="account" /></el-tab-pane> <el-tab-pane label="Media" name="media"><Media :account="account" :buffer="buffer" /></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@ -23,7 +23,15 @@ export default {
}, },
data() { data() {
return { return {
activeName: 'posts' activeName: 'posts',
defaultBuffer: 200,
buffer: 200
}
},
mounted() {
const timeline = document.getElementById('sidebar_tabs')
if (timeline !== undefined && timeline !== null) {
this.buffer = this.defaultBuffer + timeline.getBoundingClientRect().top
} }
}, },
methods: { methods: {

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="timeline"> <div id="timeline">
<DynamicScroller :items="timeline" :min-item-size="60" class="scroller" page-mode> <DynamicScroller :items="timeline" :min-item-size="60" class="scroller" :buffer="buffer" page-mode>
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index">
<toot <toot
@ -30,7 +30,7 @@ import { Event } from '~/src/renderer/components/event'
export default { export default {
name: 'media', name: 'media',
props: ['account'], props: ['account', 'buffer'],
components: { Toot }, components: { Toot },
data() { data() {
return { return {

View File

@ -16,7 +16,7 @@
> >
</toot> </toot>
</template> </template>
<DynamicScroller :items="timeline" :min-item-size="60" class="scroller" page-mode> <DynamicScroller :items="timeline" :min-item-size="60" class="scroller" :buffer="buffer" page-mode>
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index">
<toot <toot
@ -46,7 +46,7 @@ import { Event } from '~/src/renderer/components/event'
export default { export default {
name: 'posts', name: 'posts',
props: ['account'], props: ['account', 'buffer'],
components: { Toot }, components: { Toot },
data() { data() {
return { return {

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="timeline"> <div id="timeline">
<DynamicScroller :items="timeline" :min-item-size="60" class="scroller" page-mode> <DynamicScroller :items="timeline" :min-item-size="60" class="scroller" :buffer="buffer" page-mode>
<template v-slot="{ item, index, active }"> <template v-slot="{ item, index, active }">
<DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index"> <DynamicScrollerItem :item="item" :active="active" :size-dependencies="[item.uri]" :data-index="index">
<toot <toot
@ -30,7 +30,7 @@ import { Event } from '~/src/renderer/components/event'
export default { export default {
name: 'posts-and-replies', name: 'posts-and-replies',
props: ['account'], props: ['account', 'buffer'],
components: { Toot }, components: { Toot },
data() { data() {
return { return {