Skip to content

Commit 37e3a6f

Browse files
committed
carousel tom
1 parent 15d2217 commit 37e3a6f

File tree

3 files changed

+183
-0
lines changed

3 files changed

+183
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
.nitro
55
.cache
66
dist
7+
package-lock.json
78

89
# Node dependencies
910
node_modules

components/Carousel.vue

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<template>
2+
<ClientOnly>
3+
<Carousel :settings="carrousel_settings">
4+
<Slide
5+
v-for="(item, index) in props.items"
6+
:key="index"
7+
class="carousel__slide"
8+
>
9+
<a :href="item.url" target="_blank">
10+
<img :src="item.logo" class="carousel__item" />
11+
</a>
12+
</Slide>
13+
<template #addons>
14+
<Navigation />
15+
<Pagination />
16+
</template>
17+
</Carousel>
18+
</ClientOnly>
19+
</template>
20+
21+
<script setup>
22+
import "vue3-carousel/dist/carousel.css"
23+
import { Carousel, Slide, Navigation, Pagination } from "vue3-carousel"
24+
import { useDisplay } from "vuetify"
25+
26+
const props = defineProps({
27+
items: { type: Array, required: true },
28+
})
29+
30+
const { name } = toRefs(useDisplay())
31+
const nb_items_to_display = ref(3)
32+
watch(
33+
name,
34+
(value) => {
35+
switch (value) {
36+
case "xs": {
37+
nb_items_to_display.value = 1
38+
break
39+
}
40+
case "sm": {
41+
nb_items_to_display.value = 2
42+
break
43+
}
44+
default: {
45+
nb_items_to_display.value = 3
46+
break
47+
}
48+
}
49+
},
50+
{
51+
immediate: true,
52+
},
53+
)
54+
55+
const carrousel_settings = reactive({
56+
autoplay: 2000,
57+
itemsToShow: nb_items_to_display.value,
58+
itemsToScroll: 1,
59+
pauseAutoplayOnHover: true,
60+
transition: 1000,
61+
wrapAround: true,
62+
})
63+
64+
onMounted(() => {
65+
console.log(carrousel_settings)
66+
})
67+
</script>
68+
69+
<style scoped>
70+
.carousel__item {
71+
min-height: 200px;
72+
width: 100%;
73+
background-color: var(--vc-clr-white);
74+
color: var(--vc-clr-white);
75+
font-size: 20px;
76+
border-radius: 10px;
77+
display: flex;
78+
justify-content: center;
79+
align-items: center;
80+
}
81+
.carousel__slide {
82+
display: flex;
83+
padding: 15px;
84+
align-items: center;
85+
justify-content: center;
86+
}
87+
88+
.carousel__prev,
89+
.carousel__next {
90+
box-sizing: content-box;
91+
border: 5px solid red;
92+
}
93+
</style>

components/Loading.vue

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,97 @@
1717
mdi-emoticon-excited-outline
1818
</v-icon>
1919
<br />
20+
<Carousel :items="users_list"/>
2021
</v-card-text>
2122
</v-card>
2223
</v-col>
2324
</v-row>
2425
</template>
26+
27+
28+
<script setup>
29+
import { useDisplay } from "vuetify"
30+
import ying_yang from "@/assets/img/logos/ying yang.png"
31+
import chemin from "@/assets/img/logos/chemin.png"
32+
import vert from "@/assets/img/logos/vert.png"
33+
import lampadaire from "@/assets/img/logos/lampadaire.png"
34+
import collegue from "@/assets/img/logos/collegue.png"
35+
import sobene from "@/assets/img/logos/sobene.png"
36+
import etincelle from "@/assets/img/logos/etincelle.png"
37+
import geste from "@/assets/img/logos/geste.png"
38+
import socle from "@/assets/img/logos/socle.png"
39+
import derniere from "@/assets/img/logos/derniere.png"
40+
import salon from "@/assets/img/logos/salon.png"
41+
42+
43+
44+
import { loadFull } from "tsparticles"
45+
46+
const particlesInit = async (engine) => {
47+
await loadFull(engine)
48+
}
49+
50+
useHead({
51+
titleTemplate: "OpenGeode - open source framework for geometric models",
52+
})
53+
54+
const users_list = [
55+
{
56+
name: "YING YANG",
57+
logo: ying_yang,
58+
// url: "https://www.nrcan.gc.ca/home",
59+
},
60+
{
61+
name: "CHEMIN",
62+
logo: chemin,
63+
// url: "https://www.ring-team.org",
64+
},
65+
{
66+
name: "SOBRIETE ENERGETIQUE",
67+
logo: sobene,
68+
// url: "https://www.ring-team.org",
69+
},
70+
{
71+
name: "VERT",
72+
logo: vert,
73+
// url: "https://www.nrcan.gc.ca/home",
74+
},
75+
{
76+
name: "LAMPADAIRE",
77+
logo: lampadaire,
78+
// url: "https://www.bsc.es/",
79+
},
80+
{
81+
name: "COLLEGUE",
82+
logo: collegue,
83+
// url: "https://www.bsc.es/",
84+
},
85+
{
86+
name: "ETINCELLE",
87+
logo: etincelle,
88+
// url: "https://www.nrcan.gc.ca/home",
89+
},
90+
{
91+
name: "GESTE",
92+
logo: geste,
93+
// url: "https://www.nrcan.gc.ca/home",
94+
},
95+
{
96+
name: "SOCLE",
97+
logo: socle,
98+
// url: "https://www.nrcan.gc.ca/home",
99+
},
100+
{
101+
name: "DERNIERE",
102+
logo: derniere,
103+
// url: "https://www.nrcan.gc.ca/home",
104+
},
105+
{
106+
name: "SALON",
107+
logo: salon,
108+
// url: "https://www.nrcan.gc.ca/home",
109+
},
110+
]
111+
112+
const { smAndUp } = useDisplay()
113+
</script>

0 commit comments

Comments
 (0)