vue3-big-list
说明
网址: https://github.com/mailhonor/vue3-big-list
超大列表优化显示组件(实际上只显示当前需要显示的条目).
支持多选, ctrl/shift等常见操作:
- 全选 ctrl+a
- 方向键, up, down, (自动滚动到可视区)
- shift+方向键(选中), shift+up, shift+down
- (选中), shift + 鼠标, ctrl + 鼠标
例子
https://github.com/mailhonor/vue3-big-list/blob/master/demo/app.vue
演示
http://linuxmail.cn/web/big-list-demo.html
用法
模板例子如下
<vue3BigList ref="listRef"
:itemHeight="itemHeight" <!-- 传入条目固定高度 -->
@selectedItemChanged="selectedItemChanged"
@scrollTopChanged="scrollTopChanged">
<template #="{ item, selected }">
<div class="item" :class="{ 'item-selected': selected }">
{{ item.data }}
</div>
</template>
</vue3BigList>
ts 代码
import vue3BigList, { vue3BigListItem } from "vue3-big-list"
import { reset } from 'mousetrap';
const listRef = ref();
const itemHeight = ref(36);
const reStart = (count: number) => {
let blist: vue3BigListItem[] = [];
for (var i = 0; i < count; i++) {
let o: vue3BigListItem = {
id: "test_" + i,
data: {
label: "条目: " + i,
}
}
blist.push(o);
}
listRef.value.clear();
listRef.value.updateItemList(blist);
}
onMounted(() => {
listRef.value.shortcutRegister(wrapRef.value)
reStart(10000);
});
const selectedItemChanged = () => {
let items: vue3BigListItem[] = listRef.value.getSelectedItemList();
console.log("选择条目数量:", items.length);
}
const scrollTopChanged = (offset: number) => {
console.log("滚动条滚动位置:", offset);
}
组件方法
listRef.value.popupItem("test_123");
listRef.value.popupItemToMiddle("test_123");
listRef.value.updateSelectedItemList(["test_123"]);
listRef.value.appendSelectedItemList(["test_123"]);
listRef.value.unSelectedItemList(["test_123"]);
listRef.value.gotoPrevItem();
listRef.value.gotoNextItem();
let itemList = listRef.value.getSelectedItemList();
let itemList = listRef.value.getItemList();
listRef.value.clear();
listRef.value.updateItemList(itemList);
listRef.value.scrollTo(123456);