Skip to content

Overlay

Demo

Overlay Cross-platform Example and Preview

OverlayClick overlay to close

Basic Usage

vue
<script setup lang="ts">
import { ref } from 'vue'

const visible = ref(false)
</script>

<template>
  <VButton @click="visible = true">Open overlay</VButton>
  <VOverlay v-model:visible="visible" />
</template>

Z-index and Duration

vue
<template>
  <VOverlay v-model:visible="visible" :z-index="3000" :duration="0.2" />
</template>

Disable Overlay Close

vue
<template>
  <VOverlay v-model:visible="visible" :close-on-click-overlay="false" />
</template>

Props

PropTypeDefaultDescription
visibleboolean | undefinedundefinedControlled visibility
defaultVisiblebooleanfalseInitial uncontrolled visibility
disabledboolean | undefinedundefinedDisable internal visibility changes
zIndexnumber | stringundefinedOverlay z-index
durationnumber | stringundefinedAnimation duration; numbers are seconds
lockScrollbooleanfalseLock body scroll while visible
closeOnClickOverlaybooleantrueClose on overlay click

Events

EventPayloadDescription
update:visiblebooleanControlled sync event
visibleChangebooleanVisibility changed
closevoidClose requested
clickMouseEventOverlay clicked

Slots

SlotDescription
defaultCustom overlay content

Primitives

OverlayRoot uses useOverlayRoot for controlled/uncontrolled state and click-close behavior. H5 and Weapp primitives both reuse useBodyScrollLock.