Add product slider

This commit is contained in:
marzban-dev
2024-12-14 20:58:32 +03:30
parent 8015700524
commit 7e9b9bd03e
2 changed files with 79 additions and 3 deletions
@@ -0,0 +1,58 @@
<script lang="ts" setup>
// types
type Props = {
selectedSlide: number;
slides: {
id: number;
picture: string;
}[]
}
// props
const props = defineProps<Props>();
const { slides, selectedSlide } = toRefs(props);
// emit
const emit = defineEmits(["update:selectedSlide"]);
// computed
const selectedSlideDetail = computed(() => {
return slides.value.find((item) => {
return item.id === selectedSlide.value;
})!;
});
// method
const changeSlide = (id: number) => {
emit("update:selectedSlide", id);
};
</script>
<template>
<div class="flex flex-col relative gap-4">
<div class="bg-red-300 w-full relative aspect-square overflow-hidden rounded-200">
<img
class="size-full absolute object-cover"
:src="selectedSlideDetail.picture"
:alt="String(selectedSlideDetail.id)"
/>
</div>
<div class="flex items-center justify-between gap-4">
<div
@click="changeSlide(slide.id)"
v-for="slide in slides"
:class="selectedSlide === slide.id ? 'ring-black' : 'ring-transparent'"
class="cursor-pointer aspect-square w-[108px] ring-2 ring-offset-4 rounded-200 w-full overflow-hidden relative"
:key="slide.id"
>
<img class="absolute object-cover size-full" :src="slide.picture" :alt="String(slide.id)" />
</div>
</div>
</div>
</template>
+21 -3
View File
@@ -4,13 +4,31 @@
const quantity = ref(1); const quantity = ref(1);
const maxQuantity = ref(10); const maxQuantity = ref(10);
const selectedSlide = ref(0);
const slides = [
{
id: 0,
picture: "/img/product-1.jpg"
},
{
id: 1,
picture: "/img/product-2.jpg"
},
{
id: 2,
picture: "/img/product-3.jpg"
}
];
</script> </script>
<template> <template>
<div class="flex gap-12"> <div class="flex gap-12">
<div class="bg-red-300 w-full h-[500px] flex-1 rounded-200"> <Slider
class="flex-1"
</div> v-model:selectedSlide="selectedSlide"
:slides="slides"
/>
<div class="flex-1 flex flex-col gap-3 mt-12"> <div class="flex-1 flex flex-col gap-3 mt-12">
<span class="typo-label-sm"> <span class="typo-label-sm">
سامسونگ سامسونگ