|
|
@ -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) |
|
|
|