feat: 为文件夹插件导航栏添加滚动条以及鼠标滚轮相关事件处理
This commit is contained in:
1 parent
8ef243f790
commit
d19cce76d2
3 files changed
+150
-96
No files matched your search
@@ -8,9 +8,16 @@
|
|||||||
class="container-top-colorfulBar"
|
class="container-top-colorfulBar"
|
||||||
:style="{ backgroundColor: props.color }"></div>
|
:style="{ backgroundColor: props.color }"></div>
|
||||||
<div class="container-top-breadcrumb">
|
<div class="container-top-breadcrumb">
|
||||||
|
<n-scrollbar
|
||||||
|
ref="scrollbarRef"
|
||||||
|
:x-scrollable="true"
|
||||||
|
class="container-top-breadcrumb-scroll"
|
||||||
|
@wheel="handleWheel">
|
||||||
<div class="container-top-breadcrumb-container">
|
<div class="container-top-breadcrumb-container">
|
||||||
<!-- <n-scrollbar x-scrollable> -->
|
<n-breadcrumb
|
||||||
<n-breadcrumb separator=">" style="margin-left: 5px">
|
separator=">"
|
||||||
|
class="sb-nn"
|
||||||
|
style="margin-left: 5px">
|
||||||
<n-breadcrumb-item :clickable="false">
|
<n-breadcrumb-item :clickable="false">
|
||||||
<n-icon size="18">
|
<n-icon size="18">
|
||||||
<CloudOutline />
|
<CloudOutline />
|
||||||
@@ -23,8 +30,8 @@
|
|||||||
<div>{{ dir.name }}</div>
|
<div>{{ dir.name }}</div>
|
||||||
</n-breadcrumb-item>
|
</n-breadcrumb-item>
|
||||||
</n-breadcrumb>
|
</n-breadcrumb>
|
||||||
<!-- </n-scrollbar> -->
|
|
||||||
</div>
|
</div>
|
||||||
|
</n-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="container-top-tools">
|
<div class="container-top-tools">
|
||||||
<n-icon
|
<n-icon
|
||||||
@@ -52,7 +59,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { NBreadcrumbItem, NBreadcrumb, NIcon, NDropdown, NScrollbar } from 'naive-ui'
|
import {
|
||||||
|
NBreadcrumbItem,
|
||||||
|
NBreadcrumb,
|
||||||
|
NIcon,
|
||||||
|
NDropdown,
|
||||||
|
NScrollbar
|
||||||
|
} from 'naive-ui'
|
||||||
import {
|
import {
|
||||||
CloudOutline,
|
CloudOutline,
|
||||||
ChevronBackOutline,
|
ChevronBackOutline,
|
||||||
@@ -60,6 +73,7 @@ import {
|
|||||||
EllipsisVertical
|
EllipsisVertical
|
||||||
} from '@vicons/ionicons5'
|
} from '@vicons/ionicons5'
|
||||||
import VirtualDirectory from '@/class/VirtualDirectory'
|
import VirtualDirectory from '@/class/VirtualDirectory'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
color: string
|
color: string
|
||||||
@@ -79,9 +93,28 @@ const emit = defineEmits<{
|
|||||||
'set-current-directory': [virtualDirectory: VirtualDirectory]
|
'set-current-directory': [virtualDirectory: VirtualDirectory]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
|
const scrollbarRef = ref<InstanceType<typeof NScrollbar>>()
|
||||||
|
|
||||||
const handleClickBreadcrumbItem = (virtualDirectory: VirtualDirectory) => {
|
const handleClickBreadcrumbItem = (virtualDirectory: VirtualDirectory) => {
|
||||||
emit('set-current-directory', virtualDirectory)
|
emit('set-current-directory', virtualDirectory)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleWheel = (event: WheelEvent) => {
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
if (scrollbarRef.value) {
|
||||||
|
scrollbarRef.value.scrollBy({
|
||||||
|
left: event.deltaY,
|
||||||
|
behavior: "smooth"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
// @ts-ignore
|
||||||
|
scrollTo: (...args: any[]) => scrollbarRef.value?.scrollTo(...args)
|
||||||
|
// getRef: () => scrollbarRef.value
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@@ -117,14 +150,15 @@ const handleClickBreadcrumbItem = (virtualDirectory: VirtualDirectory) => {
|
|||||||
border-radius: 0 3px 3px 0;
|
border-radius: 0 3px 3px 0;
|
||||||
|
|
||||||
.container-top-breadcrumb-container {
|
.container-top-breadcrumb-container {
|
||||||
position: absolute;
|
// position: absolute;
|
||||||
height: 100%;
|
height: 21px;
|
||||||
right: 0;
|
// right: 0;
|
||||||
top: 0;
|
// top: 0;
|
||||||
min-width: 100%;
|
min-width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,3 +198,11 @@ const handleClickBreadcrumbItem = (virtualDirectory: VirtualDirectory) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.container-top-breadcrumb-scroll {
|
||||||
|
.n-scrollbar-rail {
|
||||||
|
transform: translateY(5px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
<div class="miao-directory-item-container" ref="rootDomRef">
|
<div class="miao-directory-item-container" ref="rootDomRef">
|
||||||
<!-- 顶部面包屑导航和工具栏 -->
|
<!-- 顶部面包屑导航和工具栏 -->
|
||||||
<miao-directory-top
|
<miao-directory-top
|
||||||
|
ref="miaoDirectoryTopRef"
|
||||||
:color="props.color"
|
:color="props.color"
|
||||||
:current-directory="currentDirectory"
|
:current-directory="currentDirectory"
|
||||||
@back="handleBack"
|
@back="handleBack"
|
||||||
@@ -101,6 +102,7 @@ const searchText = ref<string>('')
|
|||||||
const showDirs = ref<boolean>(true)
|
const showDirs = ref<boolean>(true)
|
||||||
const showFiles = ref<boolean>(true)
|
const showFiles = ref<boolean>(true)
|
||||||
const miaoDirectoryItemRef = ref()
|
const miaoDirectoryItemRef = ref()
|
||||||
|
const miaoDirectoryTopRef = ref<InstanceType<typeof miaoDirectoryTop>>()
|
||||||
const miaoAlertTip = ref<InstanceType<typeof miaoAlertTipProvider>>()
|
const miaoAlertTip = ref<InstanceType<typeof miaoAlertTipProvider>>()
|
||||||
|
|
||||||
class SelectedItem {
|
class SelectedItem {
|
||||||
@@ -297,6 +299,16 @@ const setCurrentDirectory = async (virtualDirectory: VirtualDirectory) => {
|
|||||||
top: 0,
|
top: 0,
|
||||||
behavior: 'instant'
|
behavior: 'instant'
|
||||||
})
|
})
|
||||||
|
// miaoDirectoryTopRef.value &&
|
||||||
|
// miaoDirectoryTopRef.value.scrollTo({
|
||||||
|
// top: 0,
|
||||||
|
// behavior: 'instant'
|
||||||
|
// })
|
||||||
|
miaoDirectoryTopRef.value?.scrollTo({
|
||||||
|
top: 0,
|
||||||
|
left: 999,
|
||||||
|
behavior: 'instant'
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
currentDirectories.value[0] = virtualDirectory
|
currentDirectories.value[0] = virtualDirectory
|
||||||
|
|||||||
+88
-88
@@ -2,91 +2,91 @@
|
|||||||
background-color: aliceblue;
|
background-color: aliceblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
html,
|
// html,
|
||||||
body,
|
// body,
|
||||||
div,
|
// div,
|
||||||
span,
|
// span,
|
||||||
applet,
|
// applet,
|
||||||
object,
|
// object,
|
||||||
iframe,
|
// iframe,
|
||||||
h1,
|
// h1,
|
||||||
h2,
|
// h2,
|
||||||
h3,
|
// h3,
|
||||||
h4,
|
// h4,
|
||||||
h5,
|
// h5,
|
||||||
h6,
|
// h6,
|
||||||
p,
|
// p,
|
||||||
blockquote,
|
// blockquote,
|
||||||
pre,
|
// pre,
|
||||||
a,
|
// a,
|
||||||
abbr,
|
// abbr,
|
||||||
acronym,
|
// acronym,
|
||||||
address,
|
// address,
|
||||||
big,
|
// big,
|
||||||
cite,
|
// cite,
|
||||||
code,
|
// code,
|
||||||
del,
|
// del,
|
||||||
dfn,
|
// dfn,
|
||||||
em,
|
// em,
|
||||||
img,
|
// img,
|
||||||
ins,
|
// ins,
|
||||||
kbd,
|
// kbd,
|
||||||
q,
|
// q,
|
||||||
s,
|
// s,
|
||||||
samp,
|
// samp,
|
||||||
small,
|
// small,
|
||||||
strike,
|
// strike,
|
||||||
strong,
|
// strong,
|
||||||
sub,
|
// sub,
|
||||||
sup,
|
// sup,
|
||||||
tt,
|
// tt,
|
||||||
var,
|
// var,
|
||||||
b,
|
// b,
|
||||||
u,
|
// u,
|
||||||
i,
|
// i,
|
||||||
center,
|
// center,
|
||||||
dl,
|
// dl,
|
||||||
dt,
|
// dt,
|
||||||
dd,
|
// dd,
|
||||||
ol,
|
// ol,
|
||||||
ul,
|
// ul,
|
||||||
li,
|
// li,
|
||||||
fieldset,
|
// fieldset,
|
||||||
form,
|
// form,
|
||||||
label,
|
// label,
|
||||||
legend,
|
// legend,
|
||||||
table,
|
// table,
|
||||||
caption,
|
// caption,
|
||||||
tbody,
|
// tbody,
|
||||||
tfoot,
|
// tfoot,
|
||||||
thead,
|
// thead,
|
||||||
tr,
|
// tr,
|
||||||
th,
|
// th,
|
||||||
td,
|
// td,
|
||||||
article,
|
// article,
|
||||||
aside,
|
// aside,
|
||||||
canvas,
|
// canvas,
|
||||||
details,
|
// details,
|
||||||
embed,
|
// embed,
|
||||||
figure,
|
// figure,
|
||||||
figcaption,
|
// figcaption,
|
||||||
footer,
|
// footer,
|
||||||
header,
|
// header,
|
||||||
hgroup,
|
// hgroup,
|
||||||
menu,
|
// menu,
|
||||||
nav,
|
// nav,
|
||||||
output,
|
// output,
|
||||||
ruby,
|
// ruby,
|
||||||
section,
|
// section,
|
||||||
summary,
|
// summary,
|
||||||
time,
|
// time,
|
||||||
mark,
|
// mark,
|
||||||
audio,
|
// audio,
|
||||||
video {
|
// video {
|
||||||
margin: 0;
|
// margin: 0;
|
||||||
padding: 0;
|
// padding: 0;
|
||||||
border: 0;
|
// border: 0;
|
||||||
font-size: 100%;
|
// font-size: 100%;
|
||||||
vertical-align: baseline;
|
// vertical-align: baseline;
|
||||||
box-sizing: border-box;
|
// box-sizing: border-box;
|
||||||
}
|
// }
|
||||||
Reference in new issue
Block a user