吴雨瞳添加了注释

master
wyt 4 months ago
parent 3807f33ed0
commit 6033f29fbf

@ -1,22 +1,31 @@
<template>
<!-- 下拉菜单容器组件设置相对定位和z-index用于包裹触发元素和下拉菜单 -->
<!-- 绑定点击事件切换下拉状态鼠标悬停/离开事件以及点击外部关闭下拉菜单 -->
<div
class="ob-dropdown relative z-50"
@click="toggle"
@mouseover="hoverHandler"
@mouseleave="leaveHandler"
v-click-away="onClickAway">
class="ob-dropdown relative z-50"
@click="toggle"
@mouseover="hoverHandler"
@mouseleave="leaveHandler"
v-click-away="onClickAway">
<!-- 插槽用于插入触发下拉菜单的元素如按钮文本等 -->
<slot />
</div>
</template>
<script lang="ts">
// VueAPI
import { defineComponent, provide, reactive, ref, toRefs, watch } from 'vue'
//
import { useDropdownStore } from '@/stores/dropdown'
//
import { useCommonStore } from '@/stores/common'
//
export default defineComponent({
//
emits: ['command'],
name: 'Dropdown',
// propshover
props: {
hover: {
type: Boolean,
@ -24,42 +33,68 @@ export default defineComponent({
}
},
setup(props, { emit }) {
//
const commonStore = useCommonStore()
// hover propsref便
const mouseHover = toRefs(props).hover
//
const dropdownStore = useDropdownStore()
// ID
const eventId = ref(0)
// /provide
let sharedState: { active: boolean } = reactive({
active: false
})
// DropdownMenu使
provide('sharedState', sharedState)
//
watch(
() => dropdownStore.commandName,
(newName, oldName) => {
const name = newName ? newName : oldName
if (eventId.value === dropdownStore.uid) emit('command', name)
}
() => dropdownStore.commandName,
(newName, oldName) => {
//
const name = newName ? newName : oldName
// IDcommand
if (eventId.value === dropdownStore.uid) emit('command', name)
}
)
//
const toggle = () => {
// ID
if (!sharedState.active) eventId.value = dropdownStore.setUid()
// hover
if (!mouseHover.value) sharedState.active = !sharedState.active
}
//
const onClickAway = () => {
// hoverID
if (!mouseHover.value && !commonStore.isMobile) {
sharedState.active = false
eventId.value = 0
}
}
//
const hoverHandler = () => {
// ID
if (!sharedState.active) eventId.value = dropdownStore.setUid()
// hover
if (mouseHover.value) sharedState.active = true
}
//
const leaveHandler = () => {
// hoverID
if (mouseHover.value) {
sharedState.active = false
eventId.value = 0
}
}
// 使
return { toggle, onClickAway, hoverHandler, leaveHandler }
}
})
</script>
</script>
Loading…
Cancel
Save