MeInnerLoading
Overlay de carregamento posicionado sobre um container ou em tela cheia, com spinner CSS nativo ou MeEffectiLoader.
Playground
Importação
vue
<script>
import { MeInnerLoading } from '@/components/global/utils/export/index'
</script>Uso Básico
Envolva o conteúdo da página num container com position: relative e coloque MeInnerLoading dentro dele.
vue
<div style="position: relative; height: 200px;">
<MeInnerLoading :visible="isLoading" />
</div>Spinner CSS vs Effecti Loader
Por padrão, o componente usa um spinner CSS puro. Com :effecti-loader="true", usa o MeEffectiLoader.
vue
<!-- Spinner CSS (padrão) -->
<MeInnerLoading :visible="isLoading" />
<!-- Effecti Loader -->
<MeInnerLoading :visible="isLoading" effecti-loader />Tamanho do Spinner
Use spinnerSize para controlar o tamanho.
vue
<MeInnerLoading :visible="isLoading" spinner-size="24px" />
<MeInnerLoading :visible="isLoading" spinner-size="36px" />
<MeInnerLoading :visible="isLoading" spinner-size="56px" />Cor do Spinner
Use spinnerColor para personalizar a cor do spinner CSS.
vue
<MeInnerLoading :visible="isLoading" spinner-color="#121d59" />
<MeInnerLoading :visible="isLoading" spinner-color="#e74c3c" />
<MeInnerLoading :visible="isLoading" spinner-color="#2ecc71" />Cor de Fundo
Use bgColor para definir a cor de fundo do overlay.
vue
<!-- Fundo claro semi-transparente -->
<MeInnerLoading
:visible="isLoading"
bg-color="rgba(255,255,255,0.85)"
/>
<!-- Fundo escuro -->
<MeInnerLoading
:visible="isLoading"
bg-color="rgba(0,0,0,0.4)"
spinner-color="#ffffff"
/>Fullscreen
Com fullscreen, o overlay cobre a tela inteira com fundo semi-transparente (rgba(0,0,0,0.2)).
⚠️ Ative no Playground para ver o efeito fullscreen em tela cheia.
vue
<MeInnerLoading :visible="isLoading" fullscreen />TIP
No modo fullscreen, as props bgColor e height são ignoradas. O fundo sempre será rgba(0,0,0,0.2) e a altura sempre 100vh.
Controle de Visibilidade
O overlay é montado/desmontado via v-if conforme a prop visible.
vue
<script setup>
import { ref } from 'vue'
const isLoading = ref(false)
async function fetchData() {
isLoading.value = true
try {
await api.getData()
} finally {
isLoading.value = false
}
}
</script>
<template>
<div style="position: relative;">
<DataTable :data="data" />
<MeInnerLoading :visible="isLoading" bg-color="rgba(255,255,255,0.85)" />
</div>
</template>API
Props
| Prop | Tipo | Padrão | Descrição |
|---|---|---|---|
visible | boolean | false | Controla a visibilidade do overlay |
fullscreen | boolean | false | Modo tela cheia com fundo rgba(0,0,0,0.2) |
effectiLoader | boolean | false | Usa MeEffectiLoader no lugar do spinner CSS |
spinnerSize | string | '36px' | Tamanho do spinner (width e height) |
spinnerBorderWidth | string | '4px' | Largura da borda do spinner CSS |
spinnerColor | string | '#121d59' | Cor do spinner CSS |
bgColor | string | 'transparent' | Cor de fundo do overlay (ignorado em fullscreen) |
height | string | '100%' | Altura do container (ignorado em fullscreen) |
Acessibilidade
- O overlay é removido do DOM quando
visible=false(usav-if, nãov-show) - Em fullscreen, aplica
z-index: 9999para garantir que fica sobre todos os elementos
Boas práticas
Sempre use MeInnerLoading dentro de um container com position: relative para que o overlay fique posicionado corretamente sobre o conteúdo da seção.