返回 slidev
PrintContainer.vue
根目录 / packages / client / internals / PrintContainer.vue
1 <script setup lang="ts">
2 import { provideLocal } from '@vueuse/core'
3 import { computed } from 'vue'
4 import { useNav } from '../composables/useNav'
5 import { injectionSlideScale } from '../constants'
6 import { configs, slideAspect, slideWidth } from '../env'
7 import PrintSlide from './PrintSlide.vue'
8
9 const props = defineProps<{
10 width: number
11 }>()
12
13 const { slides, printRange } = useNav()
14
15 const width = computed(() => props.width)
16 const height = computed(() => props.width / slideAspect.value)
17
18 const screenAspect = computed(() => width.value / height.value)
19
20 const scale = computed(() => {
21 if (screenAspect.value < slideAspect.value)
22 return width.value / slideWidth.value
23 return (height.value * slideAspect.value) / slideWidth.value
24 })
25
26 const className = computed(() => ({
27 'select-none': !configs.selectable,
28 }))
29
30 provideLocal(injectionSlideScale, scale)
31 </script>
32
33 <template>
34 <div id="print-container" :class="className">
35 <div id="print-content">
36 <PrintSlide v-for="no of printRange" :key="no" :route="slides[no - 1]" />
37 </div>
38 </div>
39 </template>
40
40 lines Plain Text