Для реализации функционала просмотра изображения товара, аналогичного тому, который вы увидели на сайте, можно использовать несколько подходов. Я опишу один из наиболее распространённых способов с использованием Vue 3 и TypeScript.
### Подход:
1. **Создание компонента для отображения изображения**: Вы можете создать отдельный компонент для отображения подробного изображения товара.
2. **Использование модального окна (или "попапа")**: Для демонстрации изображения при клике на миниатюру товара можно использовать модальное окно (или диалоговое окно).
3. **Анимация и стили**: Добавьте анимацию или стили для лучшей пользовательской привлекательности.
### Пример реализации:
1. **Создайте компонент `ImageModal.vue`:**
```vue
<template>
<div v-if="show" class="modal" @click="close">
<div class="modal-content" @click.stop>
<span class="close" @click="close">×</span>
<img :src="imageSrc" alt="Product Image" />
</div>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
props: {
show: {
type: Boolean,
required: true
},
imageSrc: {
type: String,
required: true
}
},
methods: {
close() {
this.$emit('close');
}
}
});
</script>
<style scoped>
.modal {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
z-index: 999;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
}
.modal-content {
position: relative;
}
.close {
position: absolute;
top: 10px;
right: 20px;
font-size: 30px;
cursor: pointer;
}
img {
max-width: 90%;
max-height: 90%;
}
</style>
```
2. **Используйте этот компонент в родительском компоненте:**
```vue
<template>
<div>
<img
v-for="image in product.images"
:key="image.id"
:src="image.thumbnail"
alt="Thumbnail"
@click="showImage(image.full)"
/>
<ImageModal
v-if="isModalVisible"
:show="isModalVisible"
:imageSrc="selectedImage"
@close="isModalVisible = false"
/>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import ImageModal from './ImageModal.vue';
export default defineComponent({
components: { ImageModal },
data() {
return {
product: {
images: [
{ id: 1, thumbnail: 'thumb1.jpg', full: 'image1.jpg' },
{ id: 2, thumbnail: 'thumb2.jpg', full: 'image2.jpg' },
// Добавьте другие изображения
]
},
isModalVisible: false,
selectedImage: ''
};
},
methods: {
showImage(imageSrc: string) {
this.selectedImage = imageSrc;
this.isModalVisible = true;
}
}
});
</script>
<style scoped>
img {
cursor: pointer;
margin: 5px;
}
</style>
```
### Пояснения:
1. **Компонент `ImageModal`**: Это модальное окно, которое открывается при клике на изображение. Оно принимает `imageSrc` для отображения полного изображения и `show` для управления видимостью.
2. **Использование компонента в родительском компоненте**: Мы отображаем миниатюры товаров, на каждую из которых можно кликнуть для открытия модального окна с более подробным изображением.
3. **Стили**: Добавлены базовые стили для модального окна и изображений. Вы можете настроить их для достижения желаемого внешнего вида.
Эта реализация даст пользователям возможность просматривать фотографии товара в полном размере, при этом не перезагружая страницу и создавая более динамичный интерфейс.