refactor
This commit is contained in:
parent
1056380733
commit
ddbf8c7873
1 changed files with 26 additions and 26 deletions
|
@ -143,13 +143,7 @@ watch([$$(backed), $$(contentEl)], () => {
|
||||||
if (!backed) {
|
if (!backed) {
|
||||||
if (!contentEl) return;
|
if (!contentEl) return;
|
||||||
|
|
||||||
scrollRemove = (props.pagination.reversed ? onScrollBottom : onScrollTop)(contentEl, () => {
|
scrollRemove = (props.pagination.reversed ? onScrollBottom : onScrollTop)(contentEl, executeQueue, 16);
|
||||||
if (queue.value.length === 0) return;
|
|
||||||
for (const item of queue.value) {
|
|
||||||
prepend(item, true);
|
|
||||||
}
|
|
||||||
queue.value = [];
|
|
||||||
}, 16);
|
|
||||||
} else {
|
} else {
|
||||||
if (scrollRemove) scrollRemove();
|
if (scrollRemove) scrollRemove();
|
||||||
scrollRemove = null;
|
scrollRemove = null;
|
||||||
|
@ -294,7 +288,7 @@ const fetchMoreAhead = async (): Promise<void> => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const prepend = (item: MisskeyEntity, force = false): void => {
|
const prepend = (item: MisskeyEntity): void => {
|
||||||
// 初回表示時はunshiftだけでOK
|
// 初回表示時はunshiftだけでOK
|
||||||
if (!rootEl) {
|
if (!rootEl) {
|
||||||
items.value.unshift(item);
|
items.value.unshift(item);
|
||||||
|
@ -303,25 +297,31 @@ const prepend = (item: MisskeyEntity, force = false): void => {
|
||||||
|
|
||||||
const isTop = isBackTop.value || (props.pagination.reversed ? isBottomVisible : isTopVisible)(contentEl);
|
const isTop = isBackTop.value || (props.pagination.reversed ? isBottomVisible : isTopVisible)(contentEl);
|
||||||
|
|
||||||
if (isTop || force) {
|
if (isTop) unshiftItems([item]);
|
||||||
// Prepend the item
|
else prependQueue(item);
|
||||||
items.value.unshift(item);
|
|
||||||
|
|
||||||
// オーバーフローしたら古いアイテムは捨てる
|
|
||||||
if (items.value.length >= props.displayLimit) {
|
|
||||||
// このやり方だとVue 3.2以降アニメーションが動かなくなる
|
|
||||||
//this.items = items.value.slice(0, props.displayLimit);
|
|
||||||
while (items.value.length >= props.displayLimit) {
|
|
||||||
items.value.pop();
|
|
||||||
}
|
|
||||||
more.value = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
queue.value.push(item);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const append = (item: MisskeyEntity): void => {
|
function unshiftItems(newItems: MisskeyEntity[]) {
|
||||||
|
const length = newItems.length + items.value.length;
|
||||||
|
items.value = [ ...newItems, ...items.value ].slice(0, props.displayLimit);
|
||||||
|
|
||||||
|
if (length >= props.displayLimit) more.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function executeQueue() {
|
||||||
|
if (queue.value.length === 0) return;
|
||||||
|
unshiftItems(queue.value);
|
||||||
|
queue.value = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
function prependQueue(newItem: MisskeyEntity) {
|
||||||
|
queue.value.unshift(newItem);
|
||||||
|
if (queue.value.length >= props.displayLimit) {
|
||||||
|
queue.value.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const appendItem = (item: MisskeyEntity): void => {
|
||||||
items.value.push(item);
|
items.value.push(item);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -372,7 +372,7 @@ defineExpose({
|
||||||
reload,
|
reload,
|
||||||
fetchMoreAhead,
|
fetchMoreAhead,
|
||||||
prepend,
|
prepend,
|
||||||
append,
|
append: appendItem,
|
||||||
updateItem,
|
updateItem,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in a new issue