Skip to content

Commit

Permalink
feat(useElementHover): give hook delay properties;修正codereview项
Browse files Browse the repository at this point in the history
  • Loading branch information
LockingReal committed Feb 15, 2023
1 parent ac9676e commit 1c101fd
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 22 deletions.
2 changes: 1 addition & 1 deletion packages/core/useElementHover/demo.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ref } from 'vue'
import { useElementHover } from '@vueuse/core'
const el = ref<HTMLButtonElement>()
const isHovered = useElementHover(el, { enterDelay: 200, leaveDelay: 600 })
const isHovered = useElementHover(el, { delayEnter: 200, delayLeave: 600 })
</script>

<template>
Expand Down
9 changes: 1 addition & 8 deletions packages/core/useElementHover/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,4 @@ function onHover(state: boolean) {
{{ isHovered ? 'Thank you!' : 'Hover me' }}
</button>
</template>
```

#### useElementHover deley properties

| Property | Type | Description |
| ---------- | ------ | -------------------------------------------------------------- |
| enterDelay | number | Delays setting `isHovering` to `true` for this amount in `ms` |
| leaveDelay | number | Delays setting `isHovering` to `false` for this amount in `ms` |
```
26 changes: 13 additions & 13 deletions packages/core/useElementHover/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,31 @@ import type { MaybeElementRef } from '../unrefElement'
import { unrefElement } from '../unrefElement'
import type { ConfigurableWindow } from '../_configurable'

export interface MouseHoverOptions extends ConfigurableWindow {
enterDelay?: number
leaveDelay?: number
export interface UseElementHoverOptions extends ConfigurableWindow {
delayEnter?: number
delayLeave?: number
}

export function useElementHover(el: MaybeElementRef, options: MouseHoverOptions = {}): Ref<boolean> {
const enterDelay = options ? options.enterDelay : 0
const leaveDelay = options ? options.leaveDelay : 0
export function useElementHover(el: MaybeElementRef, options: UseElementHoverOptions = {}): Ref<boolean> {
const delayEnter = options ? options.delayEnter : 0
const delayLeave = options ? options.delayLeave : 0
const isHovered = ref(false)
const timer = ref<any>(undefined)
let timer: ReturnType<typeof setTimeout> | undefined

const toggle = (which: boolean) => {
const delay = which ? enterDelay : leaveDelay
window?.clearTimeout(timer.value)
const toggle = (entering: boolean) => {
const delay = entering ? delayEnter : delayLeave
clearTimeout(timer)

if (delay)
timer.value = window?.setTimeout(() => isHovered.value = which, delay)
timer = setTimeout(() => isHovered.value = entering, delay)
else
isHovered.value = which
isHovered.value = entering
}

if (!window)
return isHovered

const target = computed(() => unrefElement(el) || window)
const target = computed(() => unrefElement(el))

useEventListener(target, 'mouseenter', () => toggle(true), { passive: true })
useEventListener(target, 'mouseleave', () => toggle(false), { passive: true })
Expand Down

0 comments on commit 1c101fd

Please sign in to comment.