Browse Source

抽离封装虚拟折叠组件说明

master
xh 1 week ago
parent
commit
29e151cfe2
  1. 10
      web/src/components/VirtualCollapsePanel/index.vue
  2. 15
      web/src/components/VirtualCollapsePanel/readme.md

10
web/src/components/VirtualCollapsePanel/index.vue

@ -37,7 +37,8 @@
</DynamicScroller> </DynamicScroller>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onBeforeUnmount, onDeactivated } from 'vue'
import { ref, computed, onBeforeUnmount, onDeactivated, useTemplateRef } from 'vue'
import type { PropType } from 'vue'
import { ArrowRight } from '@element-plus/icons-vue' import { ArrowRight } from '@element-plus/icons-vue'
import 'vue-virtual-scroller/dist/vue-virtual-scroller.css' import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller' import { DynamicScroller, DynamicScrollerItem } from 'vue-virtual-scroller'
@ -102,11 +103,11 @@ function toggleExpand(item) {
function scrollToItem(item) { function scrollToItem(item) {
if (!item) return if (!item) return
activeItem.value = item activeItem.value = item
var findIndex = list.value.findIndex((i) => i[props.keyField] === item[props.keyField])
const findIndex = list.value.findIndex((i) => i[props.keyField] === item[props.keyField])
if (findIndex === -1) { if (findIndex === -1) {
return return
} }
var top = props.minItemSize * findIndex
const top = props.minItemSize * findIndex
// //
cancelAnimationFrame(AnimationId.value as number) cancelAnimationFrame(AnimationId.value as number)
scrollTo(scrollbarScrollTop.value, top, scrollbarScrollTop.value) scrollTo(scrollbarScrollTop.value, top, scrollbarScrollTop.value)
@ -120,7 +121,7 @@ function scrollToIndex(index) {
activeItem.value = list.value[index] activeItem.value = list.value[index]
var top = props.minItemSize * index
const top = props.minItemSize * index
// //
cancelAnimationFrame(AnimationId.value as number) cancelAnimationFrame(AnimationId.value as number)
scrollTo(scrollbarScrollTop.value, top, scrollbarScrollTop.value) scrollTo(scrollbarScrollTop.value, top, scrollbarScrollTop.value)
@ -130,7 +131,6 @@ function scrollToIndex(index) {
* @param position 要滚动到的位置 * @param position 要滚动到的位置
*/ */
function scrollToPosition(position: number) { function scrollToPosition(position: number) {
if (position < 0) return if (position < 0) return
// //
cancelAnimationFrame(AnimationId.value as number) cancelAnimationFrame(AnimationId.value as number)

15
web/src/components/VirtualCollapsePanel/readme.md

@ -0,0 +1,15 @@
# 使用示例
```vue
<VirtualCollapsePanel
ref="scrollbarRef"
:data="filterMarkers"
key-field="id"
name-field="name"
:min-item-size="40"
>
<template #header="{ item }">
</template>
<template #content="{ item }"> </template>
</VirtualCollapsePanel>
```
Loading…
Cancel
Save