Skip to content

v-visible

切换元素可见性,支持动画。

起始版本: 1.1.0

用法

基本

vue
<template>
  <div v-visible="showElement">显示/隐藏</div>
</template>

<script setup>
import { ref } from 'vue'

const showElement = ref(true)
</script>

带选项

vue
<template>
  <div v-visible="{
    handler: onVisibleChange,
    useHidden: true,
    initial: true
  }">
    使用 visibility: hidden
  </div>
</template>

API

选项类型默认值描述
handlerFunction-可见性改变时的回调
useHiddenbooleanfalse使用 visibility: hidden
initialbooleantrue初始可见性状态

Composable 用法

你也可以使用 useVisible composable 来实现相同功能:

vue
<script setup>
import { ref, onMounted } from 'vue'
import { useVisible } from 'directix'

const modal = ref(null)
const { visible, show, hide, toggle, bind } = useVisible({
  initial: false,
  useHidden: true,
  onChange: (v) => console.log('可见性:', v)
})

onMounted(() => bind(modal.value))
</script>

<template>
  <button @click="toggle">切换</button>
  <div ref="modal">模态框内容</div>
</template>

API

typescript
interface UseVisibleOptions {
  /** 初始可见性 @default true */
  initial?: boolean | Ref<boolean>
  /** 是否使用 visibility: hidden 而非 display: none @default false */
  useHidden?: boolean
  /** 可见性改变时的回调 */
  onChange?: (isVisible: boolean) => void
}

interface UseVisibleReturn {
  /** 当前可见性状态 */
  visible: Ref<boolean>
  /** 显示元素 */
  show: () => void
  /** 隐藏元素 */
  hide: () => void
  /** 切换可见性 */
  toggle: () => void
  /** 绑定可见性控制到元素 */
  bind: (element: HTMLElement) => () => void
}

基于 MIT 许可发布