⬅️ Back to Table of Contents
📄 index.ts
📊 Analysis Summary
Metric |
Count |
🔧 Functions |
2 |
📦 Imports |
10 |
📊 Variables & Constants |
2 |
🟢 Vue Composition API |
1 |
📐 Interfaces |
1 |
📚 Table of Contents
🛠️ File Location:
📂 packages/core/useElementHover/index.ts
📦 Imports
Name |
Source |
MaybeRefOrGetter |
vue |
ShallowRef |
vue |
ConfigurableWindow |
../_configurable |
MaybeComputedElementRef |
../unrefElement |
computed |
vue |
shallowRef |
vue |
defaultWindow |
../_configurable |
onElementRemoval |
../onElementRemoval |
unrefElement |
../unrefElement |
useEventListener |
../useEventListener |
Variables & Constants
Name |
Type |
Kind |
Value |
Exported |
timer |
ReturnType<typeof setTimeout> | undefined |
let/var |
*not shown* |
✗ |
delay |
number |
const |
entering ? delayEnter : delayLeave |
✗ |
Vue Composition API
Name |
Type |
Reactive Variables |
Composables |
computed |
computed |
none |
none |
Functions
useElementHover(el: MaybeRefOrGetter<EventTarget | null | undefined>, options: UseElementHoverOptions): ShallowRef<boolean>
Code
export function useElementHover(el: MaybeRefOrGetter<EventTarget | null | undefined>, options: UseElementHoverOptions = {}): ShallowRef<boolean> {
const {
delayEnter = 0,
delayLeave = 0,
triggerOnRemoval = false,
window = defaultWindow,
} = options
const isHovered = shallowRef(false)
let timer: ReturnType<typeof setTimeout> | undefined
const toggle = (entering: boolean) => {
const delay = entering ? delayEnter : delayLeave
if (timer) {
clearTimeout(timer)
timer = undefined
}
if (delay)
timer = setTimeout(() => isHovered.value = entering, delay)
else
isHovered.value = entering
}
if (!window)
return isHovered
useEventListener(el, 'mouseenter', () => toggle(true), { passive: true })
useEventListener(el, 'mouseleave', () => toggle(false), { passive: true })
if (triggerOnRemoval) {
onElementRemoval(
computed(() => unrefElement(el as MaybeComputedElementRef)),
() => toggle(false),
)
}
return isHovered
}
- Parameters:
el: MaybeRefOrGetter<EventTarget | null | undefined>
options: UseElementHoverOptions
- Return Type:
ShallowRef<boolean>
- Calls:
shallowRef (from vue)
clearTimeout
setTimeout
useEventListener (from ../useEventListener)
toggle
onElementRemoval (from ../onElementRemoval)
computed (from vue)
unrefElement (from ../unrefElement)
toggle(entering: boolean): void
Code
(entering: boolean) => {
const delay = entering ? delayEnter : delayLeave
if (timer) {
clearTimeout(timer)
timer = undefined
}
if (delay)
timer = setTimeout(() => isHovered.value = entering, delay)
else
isHovered.value = entering
}
- Parameters:
entering: boolean
- Return Type:
void
- Calls:
clearTimeout
setTimeout
Interfaces
UseElementHoverOptions
Interface Code
export interface UseElementHoverOptions extends ConfigurableWindow {
delayEnter?: number
delayLeave?: number
triggerOnRemoval?: boolean
}
Properties
Name |
Type |
Optional |
Description |
delayEnter |
number |
✓ |
|
delayLeave |
number |
✓ |
|
triggerOnRemoval |
boolean |
✓ |
|