| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <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"
- >
- <ThumbnailSlide
- :slide="slide"
- :size="150"
- :visible="index < slidesLoadLimit"
- @click="turnSlide(index)"
- />
- </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>
|