| <template> | |
| <div class="slide-thumbnails"> | |
| <div class="return-button"> | |
| <IconArrowCircleLeft class="icon" @click="emit('close')" /> | |
| </div> | |
| <div class="slide-thumbnails-content"> | |
| <div | |
| class="thumbnail" | |
| :class="{ 'active': index === slideIndex }" | |
| v-for="(slide, index) in slides" | |
| :key="slide.id" | |
| @click="turnSlide(index)" | |
| > | |
| <ThumbnailSlide :slide="slide" :size="150" :visible="index < slidesLoadLimit" /> | |
| </div> | |
| </div> | |
| </div> | |
| </template> | |
| <script lang="ts" setup> | |
| import { storeToRefs } from 'pinia' | |
| import { useSlidesStore } from '@/store' | |
| import useLoadSlides from '@/hooks/useLoadSlides' | |
| import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue' | |
| const props = defineProps<{ | |
| turnSlideToIndex: (index: number) => void | |
| }>() | |
| const emit = defineEmits<{ | |
| (event: 'close'): void | |
| }>() | |
| const { slides, slideIndex } = storeToRefs(useSlidesStore()) | |
| const { slidesLoadLimit } = useLoadSlides() | |
| const turnSlide = (index: number) => { | |
| props.turnSlideToIndex(index) | |
| emit('close') | |
| } | |
| </script> | |
| <style lang="scss" scoped> | |
| .slide-thumbnails { | |
| width: 100%; | |
| height: 100%; | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| background-color: #1a1a1a; | |
| z-index: 99; | |
| } | |
| .return-button { | |
| height: 60px; | |
| padding: 20px 30px 0; | |
| .icon { | |
| color: #fff; | |
| font-size: 36px; | |
| cursor: pointer; | |
| &:hover { | |
| color: $themeColor; | |
| } | |
| } | |
| } | |
| .slide-thumbnails-content { | |
| height: calc(100% - 100px); | |
| padding: 20px 30px 30px 30px; | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-content: flex-start; | |
| @include overflow-overlay(); | |
| .thumbnail { | |
| width: 150px; | |
| outline: 2px solid #aaa; | |
| margin-right: 12px; | |
| margin-bottom: 12px; | |
| &:hover { | |
| outline-color: $themeColor; | |
| } | |
| &.active { | |
| outline-width: 3px; | |
| outline-color: $themeColor; | |
| } | |
| } | |
| } | |
| </style> |