From e79a9cf7978e0ba199bb7e0ea9b89e52bbe7522a Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 13 七月 2023 20:42:32 +0800
Subject: [PATCH] !26 update src/api/types.ts. Merge pull request !26 from Admin/N/A
---
src/layout/components/TagsView/ScrollPane.vue | 116 ++++++++++++++++++++++++++++------------------------------
1 files changed, 56 insertions(+), 60 deletions(-)
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
index 5c2977a..b50c628 100644
--- a/src/layout/components/TagsView/ScrollPane.vue
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -1,95 +1,91 @@
<template>
- <el-scrollbar
- ref="scrollContainer"
- :vertical="false"
- class="scroll-container"
- @wheel.prevent="handleScroll"
- >
+ <el-scrollbar ref="scrollContainerRef" :vertical="false" class="scroll-container" @wheel.prevent="handleScroll">
<slot />
</el-scrollbar>
</template>
-<script setup>
+<script setup lang="ts">
import useTagsViewStore from '@/store/modules/tagsView'
-
+import { TagView } from 'vue-router'
const tagAndTagSpacing = ref(4);
-const { proxy } = getCurrentInstance();
-const scrollWrapper = computed(() => proxy.$refs.scrollContainer.$refs.wrapRef);
+const scrollContainerRef = ref<ElScrollbarInstance>()
+const scrollWrapper = computed(() => scrollContainerRef.value?.$refs.wrapRef as any);
onMounted(() => {
- scrollWrapper.value.addEventListener('scroll', emitScroll, true)
+ scrollWrapper.value?.addEventListener('scroll', emitScroll, true)
})
onBeforeUnmount(() => {
- scrollWrapper.value.removeEventListener('scroll', emitScroll)
+ scrollWrapper.value?.removeEventListener('scroll', emitScroll)
})
-function handleScroll(e) {
- const eventDelta = e.wheelDelta || -e.deltaY * 40
- const $scrollWrapper = scrollWrapper.value;
- $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4
+const handleScroll = (e: WheelEvent) => {
+ const eventDelta = (e as any).wheelDelta || - e.deltaY * 40
+ const $scrollWrapper = scrollWrapper.value;
+ $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4
}
-const emits = defineEmits()
+const emits = defineEmits(['scroll'])
const emitScroll = () => {
- emits('scroll')
+ emits('scroll')
}
const tagsViewStore = useTagsViewStore()
const visitedViews = computed(() => tagsViewStore.visitedViews);
-function moveToTarget(currentTag) {
- const $container = proxy.$refs.scrollContainer.$el
- const $containerWidth = $container.offsetWidth
- const $scrollWrapper = scrollWrapper.value;
+const moveToTarget = (currentTag: TagView) => {
+ const $container = scrollContainerRef.value?.$el
+ const $containerWidth = $container.offsetWidth
+ const $scrollWrapper = scrollWrapper.value;
- let firstTag = null
- let lastTag = null
+ let firstTag = null
+ let lastTag = null
- // find first tag and last tag
- if (visitedViews.value.length > 0) {
- firstTag = visitedViews.value[0]
- lastTag = visitedViews.value[visitedViews.value.length - 1]
- }
-
- if (firstTag === currentTag) {
- $scrollWrapper.scrollLeft = 0
- } else if (lastTag === currentTag) {
- $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth
- } else {
- const tagListDom = document.getElementsByClassName('tags-view-item');
- const currentIndex = visitedViews.value.findIndex(item => item === currentTag)
- let prevTag = null
- let nextTag = null
- for (const k in tagListDom) {
- if (k !== 'length' && Object.hasOwnProperty.call(tagListDom, k)) {
- if (tagListDom[k].dataset.path === visitedViews.value[currentIndex - 1].path) {
- prevTag = tagListDom[k];
- }
- if (tagListDom[k].dataset.path === visitedViews.value[currentIndex + 1].path) {
- nextTag = tagListDom[k];
- }
- }
+ // find first tag and last tag
+ if (visitedViews.value.length > 0) {
+ firstTag = visitedViews.value[0]
+ lastTag = visitedViews.value[visitedViews.value.length - 1]
}
- // the tag's offsetLeft after of nextTag
- const afterNextTagOffsetLeft = nextTag.offsetLeft + nextTag.offsetWidth + tagAndTagSpacing.value
+ if (firstTag === currentTag) {
+ $scrollWrapper.scrollLeft = 0
+ } else if (lastTag === currentTag) {
+ $scrollWrapper.scrollLeft = $scrollWrapper.scrollWidth - $containerWidth
+ } else {
+ const tagListDom: any = document.getElementsByClassName('tags-view-item');
+ const currentIndex = visitedViews.value.findIndex(item => item === currentTag)
+ let prevTag = null
+ let nextTag = null
- // the tag's offsetLeft before of prevTag
- const beforePrevTagOffsetLeft = prevTag.offsetLeft - tagAndTagSpacing.value
- if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
- $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth
- } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
- $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft
+ for (const k in tagListDom) {
+ if (k !== 'length' && Object.hasOwnProperty.call(tagListDom, k)) {
+ if (tagListDom[k].dataset.path === visitedViews.value[currentIndex - 1].path) {
+ prevTag = tagListDom[k];
+ }
+ if (tagListDom[k].dataset.path === visitedViews.value[currentIndex + 1].path) {
+ nextTag = tagListDom[k];
+ }
+ }
+ }
+
+ // the tag's offsetLeft after of nextTag
+ const afterNextTagOffsetLeft = nextTag.offsetLeft + nextTag.offsetWidth + tagAndTagSpacing.value
+
+ // the tag's offsetLeft before of prevTag
+ const beforePrevTagOffsetLeft = prevTag.offsetLeft - tagAndTagSpacing.value
+ if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
+ $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth
+ } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
+ $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft
+ }
}
- }
}
defineExpose({
- moveToTarget,
+ moveToTarget,
})
</script>
-<style lang='scss' scoped>
+<style lang="scss" scoped>
.scroll-container {
white-space: nowrap;
position: relative;
@@ -102,4 +98,4 @@
height: 49px;
}
}
-</style>
\ No newline at end of file
+</style>
--
Gitblit v1.9.3