vp-nav-full.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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) var(--el-transition-function-ease-in-out-bezier);
  40. }
  41. }
  42. &.el-fade-in-enter-from,
  43. &.el-fade-in-leave-to {
  44. .full-screen-container {
  45. transform: translateY(-8px);
  46. }
  47. }
  48. .full-screen-container {
  49. margin: 0 auto;
  50. padding: 24px 0 96px;
  51. max-width: 18rem;
  52. }
  53. }
  54. </style>