vp-nav-full.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <script setup lang="ts">
  2. import { ref } from 'vue'
  3. import { useLockScreen } from '../composables/lock-screen'
  4. import VPFullScreenMenu from './full-screen/vp-menu.vue'
  5. import VPFullScreenTranslation from './full-screen/vp-translation.vue'
  6. import VPFullScreenThemeToggler from './full-screen/vp-theme-toggler.vue'
  7. defineProps<{
  8. fullScreen: boolean
  9. }>()
  10. const { lock, cleanup } = useLockScreen()
  11. const fullscreen = ref()
  12. </script>
  13. <template>
  14. <Transition name="el-fade-in" @enter="lock" @after-leave="cleanup">
  15. <div v-if="fullScreen" ref="fullscreen">
  16. <div class="full-screen-container">
  17. <VPFullScreenMenu @close="$emit('close')" />
  18. <VPFullScreenTranslation @close="$emit('close')" />
  19. <VPFullScreenThemeToggler />
  20. </div>
  21. </div>
  22. </Transition>
  23. </template>
  24. <style lang="scss" scoped>
  25. .full-screen {
  26. position: fixed;
  27. top: var(--nav-height);
  28. right: 0;
  29. bottom: 0;
  30. left: 0;
  31. padding: 0 32px;
  32. width: 100%;
  33. background-color: var(--bg-color);
  34. transition: background-color 0.5s;
  35. overflow-y: auto;
  36. &.el-fade-in-enter-active,
  37. &.el-fade-in-leave-active {
  38. .full-screen-container {
  39. transition: transform var(--el-transition-duration)
  40. var(--el-transition-function-ease-in-out-bezier);
  41. }
  42. }
  43. &.el-fade-in-enter-from,
  44. &.el-fade-in-leave-to {
  45. .full-screen-container {
  46. transform: translateY(-8px);
  47. }
  48. }
  49. .full-screen-container {
  50. margin: 0 auto;
  51. padding: 24px 0 96px;
  52. max-width: 18rem;
  53. }
  54. }
  55. </style>