refactor(components): [scrollbar] Simplifying updateTriggerStatus (#21485)

* refactor(components): [scrollbar] Simplifying updateTriggerStatus

* Update packages/components/scrollbar/src/scrollbar.vue

Co-authored-by: Noblet Ouways <91417411+Dsaquel@users.noreply.github.com>

---------

Co-authored-by: Noblet Ouways <91417411+Dsaquel@users.noreply.github.com>
This commit is contained in:
thinkasany
2025-07-24 20:22:01 +08:00
committed by GitHub
parent 865ce3849e
commit e22cb8cc82

View File

@@ -71,7 +71,6 @@ const distanceScrollState = {
right: false,
left: false,
}
type distanceScrollStateKey = keyof typeof distanceScrollState
const scrollbarRef = ref<HTMLDivElement>()
const wrapRef = ref<HTMLDivElement>()
@@ -101,31 +100,25 @@ const shouldSkipDirection = (direction: ScrollbarDirection) => {
return distanceScrollState[direction] ?? false
}
const DIRECTION_PAIRS: Record<ScrollbarDirection, ScrollbarDirection> = {
top: 'bottom',
bottom: 'top',
left: 'right',
right: 'left',
}
const updateTriggerStatus = (arrivedStates: Record<string, boolean>) => {
const _updateTriggerState = (to: string, from: string) => {
const arrived = arrivedStates[to]
const oppositeArrived = arrivedStates[from]
const triggerKey = to as distanceScrollStateKey
const oppositeTriggerKey = from as distanceScrollStateKey
if (arrived && !distanceScrollState[triggerKey]) {
distanceScrollState[triggerKey] = true
}
if (!oppositeArrived && distanceScrollState[oppositeTriggerKey]) {
distanceScrollState[oppositeTriggerKey] = false
}
const oppositeDirection = DIRECTION_PAIRS[direction]
if (!oppositeDirection) return
const arrived = arrivedStates[direction]
const oppositeArrived = arrivedStates[oppositeDirection]
if (arrived && !distanceScrollState[direction]) {
distanceScrollState[direction] = true
}
// scroll bottom to top
if (direction === 'top') {
_updateTriggerState('top', 'bottom')
}
if (direction === 'bottom') {
_updateTriggerState('bottom', 'top')
}
if (direction === 'left') {
_updateTriggerState('left', 'right')
}
if (direction === 'right') {
_updateTriggerState('right', 'left')
if (!oppositeArrived && distanceScrollState[oppositeDirection]) {
distanceScrollState[oppositeDirection] = false
}
}