Skip to content

useFocus

Category
Export Size
605 B
Last Changed
15 minutes ago

用于跟踪或设置 DOM 元素的焦点状态的响应式工具。状态变化反映了目标元素是否为焦点元素。从外部设置响应式值将触发对应于 truefalse 值的 focusblur 事件。

Demo

可获得焦点的段落


基本用法

ts
import { useFocus } from '@vueuse/core'

const target = ref()
const { focused } = useFocus(target)

watch(focused, (focused) => {
  if (focused)
    console.log('输入元素已获取焦点')
  else console.log('输入元素已失去焦点')
})

设置初始焦点

可以通过将 initialValue 选项设置为 true 来在首次渲染时让元素获得焦点。这将触发目标元素上的 focus 事件。

ts
import { useFocus } from '@vueuse/core'

const target = ref()
const { focused } = useFocus(target, { initialValue: true })

更改焦点状态

focused 响应式引用的更改将自动触发对应于 truefalse 值的 focusblur 事件。您可以利用这种行为来作为其他操作的结果使目标元素获得焦点(例如,当按钮被点击时,如下所示)。

vue
<script>
import { useFocus } from '@vueuse/core'
import { ref } from 'vue'

export default {
  setup() {
    const input = ref()
    const { focused } = useFocus(input)

    return {
      input,
      focused,
    }
  },
}
</script>

<template>
  <div>
    <button type="button" @click="focused = true">
      单击我以使下面的输入框获得焦点
    </button>
    <input ref="input" type="text">
  </div>
</template>

类型声明

typescript
export interface UseFocusOptions extends ConfigurableWindow {
  /**
   * 初始值。如果设置为 true,则焦点将设置在目标上
   *
   * @default false
   */
  initialValue?: boolean
  /**
   * 复制 CSS 的 :focus-visible 行为
   *
   * @default false
   */
  focusVisible?: boolean
  /**
   * Prevent scrolling to the element when it is focused.
   *
   * @default false
   */
  preventScroll?: boolean
}
export interface UseFocusReturn {
  /**
   * 如果为 true,则表示元素具有焦点。如果为 false,则表示元素没有焦点
   * 如果设置为 true,则元素将获得焦点。如果设置为 false,则元素将失去焦点。
   */
  focused: Ref<boolean>
}
/**
 * 跟踪或设置 DOM 元素的焦点状态。
 *
 * @see https://vueuse.org/useFocus
 * @param target The target element for the focus and blur events.
 * @param options
 */
export declare function useFocus(
  target: MaybeElementRef,
  options?: UseFocusOptions,
): UseFocusReturn

Source

SourceDemoDocs

贡献者

Anthony Fu
丶远方
William T. Kirby
Anthony Fu
陪我去看海吧
Max
Waleed Khaled
Jelf
ByMykel
Levi Bucsis
webfansplz
Jakub Freisler

变更日志

v10.10.1 on 6/11/2024
4d868 - feat: support preventScroll option (#3994)
v10.3.0 on 7/30/2023
80329 - feat: support :focus-visible (#3254)
v9.13.0 on 2/18/2023
7cd88 - fix: listen focus and blur to the targetElement (#2631)

Released under the MIT License.