srcdev-nuxt-components 2.1.23 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<div v-for="item in galleryData" class="item" ref="SliderItemsDom">
|
|
2
|
+
<div class="slider-gallery" :class="elementClasses" ref="sliderGalleryWrapper">
|
|
3
|
+
<div class="list" ref="sliderGalleryImagesList">
|
|
4
|
+
<div v-for="(item, index) in galleryData" :key="index" class="item">
|
|
6
5
|
<img :src="item.src" />
|
|
7
6
|
<div class="content">
|
|
8
7
|
<div class="author">{{ item.stylist }}</div>
|
|
@@ -15,33 +14,40 @@
|
|
|
15
14
|
</div>
|
|
16
15
|
</div>
|
|
17
16
|
</div>
|
|
18
|
-
|
|
19
|
-
<div class="thumbnail" ref="
|
|
20
|
-
<div v-for="item in galleryData"
|
|
17
|
+
|
|
18
|
+
<div class="thumbnail" ref="sliderGalleryThumbnailsList">
|
|
19
|
+
<div v-for="(item, index) in galleryData" :key="index" class="item">
|
|
21
20
|
<img :src="item.src" />
|
|
22
21
|
<div class="content">
|
|
23
|
-
<div class="title">
|
|
24
|
-
<div class="description">
|
|
22
|
+
<div class="title" v-show="item.thumbnail?.title !== ''">{{ item.thumbnail?.title }}</div>
|
|
23
|
+
<div class="description" v-show="item.thumbnail?.description !== ''">{{ item.thumbnail?.description }}</div>
|
|
25
24
|
</div>
|
|
26
25
|
</div>
|
|
27
26
|
</div>
|
|
28
|
-
<!-- next prev -->
|
|
29
27
|
|
|
30
28
|
<div class="arrows">
|
|
31
29
|
<button id="prev" ref="prevDom" @click.prevent="doPrevious()"><</button>
|
|
32
30
|
<button id="next" ref="nextDom" @click.prevent="doNext()">></button>
|
|
33
31
|
</div>
|
|
34
|
-
|
|
35
|
-
<div class="time"
|
|
32
|
+
|
|
33
|
+
<div class="time"></div>
|
|
36
34
|
</div>
|
|
37
35
|
</template>
|
|
38
36
|
|
|
39
37
|
<script setup lang="ts">
|
|
40
38
|
const props = defineProps({
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
autoRun: {
|
|
40
|
+
type: Boolean,
|
|
41
|
+
default: true,
|
|
42
|
+
},
|
|
43
|
+
autoRunInterval: {
|
|
44
|
+
type: Number,
|
|
45
|
+
default: 7000,
|
|
46
|
+
},
|
|
47
|
+
animationDuration: {
|
|
48
|
+
type: Number,
|
|
49
|
+
default: 3000,
|
|
50
|
+
},
|
|
45
51
|
styleClassPassthrough: {
|
|
46
52
|
type: Array as PropType<string[]>,
|
|
47
53
|
default: () => [],
|
|
@@ -55,28 +61,21 @@ interface IGalleryData {
|
|
|
55
61
|
title?: string;
|
|
56
62
|
category?: string;
|
|
57
63
|
description?: string;
|
|
64
|
+
thumbnail?: {
|
|
65
|
+
title: string;
|
|
66
|
+
description: string;
|
|
67
|
+
};
|
|
58
68
|
}
|
|
59
69
|
|
|
60
70
|
const { elementClasses, resetElementClasses } = useStyleClassPassthrough(props.styleClassPassthrough);
|
|
61
71
|
const galleryData = defineModel<IGalleryData[]>('galleryData');
|
|
62
72
|
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const carouselDom = useTemplateRef('carouselDom');
|
|
68
|
-
const SliderDom = useTemplateRef('SliderDom');
|
|
69
|
-
const thumbnailBorderDom = useTemplateRef('thumbnailBorderDom');
|
|
70
|
-
// let thumbnailItemsDom = useTemplateRef('thumbnailItemsDom');
|
|
71
|
-
const timeDom = useTemplateRef('timeDom');
|
|
72
|
-
|
|
73
|
-
// setup showSlider DOM
|
|
74
|
-
const SliderItemsDom = useTemplateRef('SliderItemsDom');
|
|
75
|
-
const thumbnailItemsDom = useTemplateRef('thumbnailItemsDom');
|
|
73
|
+
const sliderGalleryWrapper = useTemplateRef('sliderGalleryWrapper');
|
|
74
|
+
const sliderGalleryImagesList = useTemplateRef('sliderGalleryImagesList');
|
|
75
|
+
const sliderGalleryThumbnailsList = useTemplateRef('sliderGalleryThumbnailsList');
|
|
76
76
|
|
|
77
|
-
//
|
|
78
|
-
const
|
|
79
|
-
const timeAutoNext = 7000;
|
|
77
|
+
// const animationDuration = 3000;
|
|
78
|
+
const autoRunInterval = 7000;
|
|
80
79
|
|
|
81
80
|
const doNext = () => {
|
|
82
81
|
showSlider('next');
|
|
@@ -88,54 +87,72 @@ const doPrevious = () => {
|
|
|
88
87
|
|
|
89
88
|
let runTimeOut: any;
|
|
90
89
|
let runNextAuto = setTimeout(() => {
|
|
90
|
+
if (!props.autoRun) return;
|
|
91
91
|
doNext();
|
|
92
|
-
},
|
|
92
|
+
}, autoRunInterval);
|
|
93
93
|
|
|
94
94
|
function showSlider(type: string) {
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
const currentThumbnailItems = Array.from(thumbnailBorderDom.value?.children || []);
|
|
95
|
+
const currentSliderItems = Array.from(sliderGalleryImagesList.value?.children || []);
|
|
96
|
+
const currentThumbnailItems = Array.from(sliderGalleryThumbnailsList.value?.children || []);
|
|
98
97
|
|
|
99
98
|
if (type === 'next') {
|
|
100
|
-
// Move the first item to the end
|
|
101
99
|
if (currentSliderItems.length) {
|
|
102
100
|
const firstItem = currentSliderItems[0];
|
|
103
|
-
|
|
101
|
+
sliderGalleryImagesList.value?.appendChild(firstItem);
|
|
104
102
|
}
|
|
105
103
|
|
|
106
104
|
if (currentThumbnailItems.length) {
|
|
107
105
|
const firstThumb = currentThumbnailItems[0];
|
|
108
|
-
|
|
106
|
+
sliderGalleryThumbnailsList.value?.appendChild(firstThumb);
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
|
|
109
|
+
sliderGalleryWrapper.value?.classList.add('next');
|
|
112
110
|
} else {
|
|
113
|
-
//
|
|
111
|
+
// For prev animation:
|
|
112
|
+
// 1. First modify the DOM (prepend the items)
|
|
114
113
|
if (currentSliderItems.length) {
|
|
115
114
|
const lastItem = currentSliderItems[currentSliderItems.length - 1];
|
|
116
|
-
|
|
115
|
+
// Set initial state before prepending (if needed)
|
|
116
|
+
lastItem.classList.add('prepend-item');
|
|
117
|
+
sliderGalleryImagesList.value?.prepend(lastItem);
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
if (currentThumbnailItems.length) {
|
|
120
121
|
const lastThumb = currentThumbnailItems[currentThumbnailItems.length - 1];
|
|
121
|
-
|
|
122
|
+
// Set initial state before prepending (if needed)
|
|
123
|
+
lastThumb.classList.add('prepend-item');
|
|
124
|
+
sliderGalleryThumbnailsList.value?.prepend(lastThumb);
|
|
122
125
|
}
|
|
123
126
|
|
|
124
|
-
|
|
127
|
+
// 2. Force reflow to ensure the DOM changes are applied
|
|
128
|
+
// This is a standard technique to ensure CSS transitions work properly
|
|
129
|
+
// when you need to apply styles immediately after DOM changes
|
|
130
|
+
sliderGalleryWrapper.value?.offsetWidth;
|
|
131
|
+
|
|
132
|
+
// 3. Add the class for animation
|
|
133
|
+
sliderGalleryWrapper.value?.classList.add('prev');
|
|
125
134
|
}
|
|
126
135
|
|
|
127
136
|
clearTimeout(runTimeOut);
|
|
128
137
|
runTimeOut = setTimeout(() => {
|
|
129
|
-
if (
|
|
130
|
-
|
|
131
|
-
|
|
138
|
+
if (sliderGalleryWrapper.value) {
|
|
139
|
+
sliderGalleryWrapper.value.classList.remove('next');
|
|
140
|
+
sliderGalleryWrapper.value.classList.remove('prev');
|
|
141
|
+
|
|
142
|
+
// Remove any helper classes we added
|
|
143
|
+
const items = sliderGalleryImagesList.value?.querySelectorAll('.prepend-item');
|
|
144
|
+
items?.forEach((item) => item.classList.remove('prepend-item'));
|
|
145
|
+
|
|
146
|
+
const thumbs = sliderGalleryThumbnailsList.value?.querySelectorAll('.prepend-item');
|
|
147
|
+
thumbs?.forEach((thumb) => thumb.classList.remove('prepend-item'));
|
|
132
148
|
}
|
|
133
|
-
},
|
|
149
|
+
}, props.animationDuration);
|
|
134
150
|
|
|
135
151
|
clearTimeout(runNextAuto);
|
|
136
152
|
runNextAuto = setTimeout(() => {
|
|
153
|
+
if (!props.autoRun) return;
|
|
137
154
|
doNext();
|
|
138
|
-
},
|
|
155
|
+
}, autoRunInterval);
|
|
139
156
|
}
|
|
140
157
|
|
|
141
158
|
watch(
|
|
@@ -147,150 +164,297 @@ watch(
|
|
|
147
164
|
</script>
|
|
148
165
|
|
|
149
166
|
<style lang="css">
|
|
150
|
-
/*
|
|
151
|
-
.
|
|
152
|
-
|
|
167
|
+
/* slider-gallery */
|
|
168
|
+
.slider-gallery {
|
|
169
|
+
--_animationDuration: v-bind(animationDuration + 'ms');
|
|
170
|
+
|
|
171
|
+
--_thembnailAspectRatio: 150 /220;
|
|
172
|
+
|
|
173
|
+
height: 100svh;
|
|
153
174
|
/* margin-top: -50px; */
|
|
154
175
|
width: 100vw;
|
|
155
176
|
overflow: hidden;
|
|
156
177
|
position: absolute;
|
|
157
178
|
inset: 0 0 0 0;
|
|
158
|
-
}
|
|
159
|
-
.carousel .list .item {
|
|
160
|
-
width: 100%;
|
|
161
|
-
height: 100%;
|
|
162
|
-
position: absolute;
|
|
163
|
-
inset: 0 0 0 0;
|
|
164
|
-
}
|
|
165
|
-
.carousel .list .item img {
|
|
166
|
-
width: 100%;
|
|
167
|
-
height: 100%;
|
|
168
|
-
object-fit: cover;
|
|
169
|
-
}
|
|
170
|
-
.carousel .list .item .content {
|
|
171
|
-
position: absolute;
|
|
172
|
-
top: 20%;
|
|
173
|
-
width: 1140px;
|
|
174
|
-
max-width: 80%;
|
|
175
|
-
left: 50%;
|
|
176
|
-
transform: translateX(-50%);
|
|
177
|
-
padding-right: 30%;
|
|
178
|
-
box-sizing: border-box;
|
|
179
|
-
color: #fff;
|
|
180
|
-
text-shadow: 0 5px 10px #0004;
|
|
181
|
-
}
|
|
182
|
-
.carousel .list .item .author {
|
|
183
|
-
font-weight: bold;
|
|
184
|
-
letter-spacing: 10px;
|
|
185
|
-
}
|
|
186
|
-
.carousel .list .item .title,
|
|
187
|
-
.carousel .list .item .topic {
|
|
188
|
-
font-size: 5em;
|
|
189
|
-
font-weight: bold;
|
|
190
|
-
line-height: 1.3em;
|
|
191
|
-
}
|
|
192
|
-
.carousel .list .item .topic {
|
|
193
|
-
color: #f1683a;
|
|
194
|
-
}
|
|
195
|
-
.carousel .list .item .buttons {
|
|
196
|
-
display: grid;
|
|
197
|
-
grid-template-columns: repeat(2, 130px);
|
|
198
|
-
grid-template-rows: 40px;
|
|
199
|
-
gap: 5px;
|
|
200
|
-
margin-top: 20px;
|
|
201
|
-
}
|
|
202
|
-
.carousel .list .item .buttons button {
|
|
203
|
-
background-color: #99999975;
|
|
204
|
-
border: 1px solid #fff;
|
|
205
|
-
color: #fff;
|
|
206
|
-
letter-spacing: 3px;
|
|
207
|
-
font-weight: 500;
|
|
208
|
-
}
|
|
209
|
-
/* .carousel .list .item .buttons button:nth-child(2) {
|
|
210
|
-
background-color: transparent;
|
|
211
|
-
border: 1px solid #fff;
|
|
212
|
-
color: #eee;
|
|
213
|
-
} */
|
|
214
|
-
/* thumbail */
|
|
215
|
-
.thumbnail {
|
|
216
|
-
position: absolute;
|
|
217
|
-
bottom: 50px;
|
|
218
|
-
left: 50%;
|
|
219
|
-
width: max-content;
|
|
220
|
-
z-index: 100;
|
|
221
|
-
display: flex;
|
|
222
|
-
gap: 20px;
|
|
223
|
-
}
|
|
224
|
-
.thumbnail .item {
|
|
225
|
-
width: 150px;
|
|
226
|
-
height: 220px;
|
|
227
|
-
flex-shrink: 0;
|
|
228
|
-
position: relative;
|
|
229
|
-
}
|
|
230
|
-
.thumbnail .item img {
|
|
231
|
-
width: 100%;
|
|
232
|
-
height: 100%;
|
|
233
|
-
object-fit: cover;
|
|
234
|
-
border-radius: 20px;
|
|
235
|
-
}
|
|
236
|
-
.thumbnail .item .content {
|
|
237
|
-
color: #fff;
|
|
238
|
-
position: absolute;
|
|
239
|
-
bottom: 10px;
|
|
240
|
-
left: 10px;
|
|
241
|
-
right: 10px;
|
|
242
|
-
}
|
|
243
|
-
.thumbnail .item .content .title {
|
|
244
|
-
font-weight: 500;
|
|
245
|
-
}
|
|
246
|
-
.thumbnail .item .content .description {
|
|
247
|
-
font-weight: 300;
|
|
248
|
-
}
|
|
249
|
-
/* arrows */
|
|
250
|
-
.arrows {
|
|
251
|
-
position: absolute;
|
|
252
|
-
top: 80%;
|
|
253
|
-
right: 52%;
|
|
254
|
-
z-index: 100;
|
|
255
|
-
width: 300px;
|
|
256
|
-
max-width: 30%;
|
|
257
|
-
display: flex;
|
|
258
|
-
gap: 10px;
|
|
259
|
-
align-items: center;
|
|
260
|
-
}
|
|
261
|
-
.arrows button {
|
|
262
|
-
width: 40px;
|
|
263
|
-
height: 40px;
|
|
264
|
-
border-radius: 50%;
|
|
265
|
-
background-color: #eee4;
|
|
266
|
-
border: none;
|
|
267
|
-
color: #fff;
|
|
268
|
-
font-family: monospace;
|
|
269
|
-
font-weight: bold;
|
|
270
|
-
transition: 0.5s;
|
|
271
|
-
}
|
|
272
|
-
.arrows button:hover {
|
|
273
|
-
background-color: #fff;
|
|
274
|
-
color: #000;
|
|
275
|
-
}
|
|
276
179
|
|
|
277
|
-
|
|
278
|
-
.
|
|
279
|
-
|
|
280
|
-
|
|
180
|
+
.list {
|
|
181
|
+
.item {
|
|
182
|
+
width: 100%;
|
|
183
|
+
height: 100%;
|
|
184
|
+
position: absolute;
|
|
185
|
+
inset: 0 0 0 0;
|
|
186
|
+
|
|
187
|
+
&:nth-child(1) {
|
|
188
|
+
z-index: 1;
|
|
189
|
+
|
|
190
|
+
.content {
|
|
191
|
+
.author,
|
|
192
|
+
.title,
|
|
193
|
+
.topic,
|
|
194
|
+
.des,
|
|
195
|
+
.buttons {
|
|
196
|
+
transform: translateY(50px);
|
|
197
|
+
filter: blur(20px);
|
|
198
|
+
opacity: 0;
|
|
199
|
+
animation: showContent 0.5s 1s linear 1 forwards;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.title {
|
|
203
|
+
animation-delay: 1.2s !important;
|
|
204
|
+
}
|
|
205
|
+
.topic {
|
|
206
|
+
animation-delay: 1.4s !important;
|
|
207
|
+
}
|
|
208
|
+
.des {
|
|
209
|
+
animation-delay: 1.6s !important;
|
|
210
|
+
}
|
|
211
|
+
.buttons {
|
|
212
|
+
animation-delay: 1.8s !important;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
img {
|
|
218
|
+
width: 100%;
|
|
219
|
+
height: 100%;
|
|
220
|
+
object-fit: cover;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.content {
|
|
224
|
+
position: absolute;
|
|
225
|
+
top: 20%;
|
|
226
|
+
width: 1140px;
|
|
227
|
+
max-width: 80%;
|
|
228
|
+
left: 50%;
|
|
229
|
+
transform: translateX(-50%);
|
|
230
|
+
padding-right: 30%;
|
|
231
|
+
box-sizing: border-box;
|
|
232
|
+
color: #fff;
|
|
233
|
+
text-shadow: 0 5px 10px #0004;
|
|
234
|
+
|
|
235
|
+
.author {
|
|
236
|
+
font-weight: bold;
|
|
237
|
+
letter-spacing: 10px;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.title {
|
|
241
|
+
font-size: 5em;
|
|
242
|
+
font-weight: bold;
|
|
243
|
+
line-height: 1.3em;
|
|
244
|
+
}
|
|
245
|
+
.topic {
|
|
246
|
+
font-size: 5em;
|
|
247
|
+
font-weight: bold;
|
|
248
|
+
line-height: 1.3em;
|
|
249
|
+
color: #f1683a;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.buttons {
|
|
253
|
+
display: grid;
|
|
254
|
+
grid-template-columns: repeat(2, 130px);
|
|
255
|
+
grid-template-rows: 40px;
|
|
256
|
+
gap: 5px;
|
|
257
|
+
margin-top: 20px;
|
|
258
|
+
|
|
259
|
+
button {
|
|
260
|
+
background-color: #99999975;
|
|
261
|
+
border: 1px solid #fff;
|
|
262
|
+
color: #fff;
|
|
263
|
+
letter-spacing: 3px;
|
|
264
|
+
font-weight: 500;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.thumbnail {
|
|
272
|
+
position: absolute;
|
|
273
|
+
bottom: 50px;
|
|
274
|
+
left: 50%;
|
|
275
|
+
width: max-content;
|
|
276
|
+
z-index: 100;
|
|
277
|
+
display: flex;
|
|
278
|
+
gap: 20px;
|
|
279
|
+
|
|
280
|
+
.item {
|
|
281
|
+
width: 150px;
|
|
282
|
+
height: 220px;
|
|
283
|
+
flex-shrink: 0;
|
|
284
|
+
position: relative;
|
|
285
|
+
|
|
286
|
+
border: var(--_thumbnailBorder, 1px solid transparent);
|
|
287
|
+
outline: var(--_thumbnailOutline, 1px solid transparent);
|
|
288
|
+
border-radius: var(--_thumbnailBorderRadius, 20px);
|
|
289
|
+
|
|
290
|
+
img {
|
|
291
|
+
width: 100%;
|
|
292
|
+
height: 100%;
|
|
293
|
+
object-fit: cover;
|
|
294
|
+
border-radius: 20px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.content {
|
|
298
|
+
color: #fff;
|
|
299
|
+
position: absolute;
|
|
300
|
+
bottom: 10px;
|
|
301
|
+
left: 10px;
|
|
302
|
+
right: 10px;
|
|
303
|
+
|
|
304
|
+
.title {
|
|
305
|
+
font-weight: 500;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
.description {
|
|
309
|
+
font-weight: 300;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/* arrows */
|
|
316
|
+
.arrows {
|
|
317
|
+
position: absolute;
|
|
318
|
+
top: 80%;
|
|
319
|
+
right: 52%;
|
|
320
|
+
z-index: 100;
|
|
321
|
+
width: 300px;
|
|
322
|
+
max-width: 30%;
|
|
323
|
+
display: flex;
|
|
324
|
+
gap: 10px;
|
|
325
|
+
align-items: center;
|
|
326
|
+
|
|
327
|
+
button {
|
|
328
|
+
width: 40px;
|
|
329
|
+
height: 40px;
|
|
330
|
+
border-radius: 50%;
|
|
331
|
+
background-color: #eee4;
|
|
332
|
+
border: none;
|
|
333
|
+
color: #fff;
|
|
334
|
+
font-family: monospace;
|
|
335
|
+
font-weight: bold;
|
|
336
|
+
transition: 0.5s;
|
|
337
|
+
|
|
338
|
+
&:hover {
|
|
339
|
+
background-color: #fff;
|
|
340
|
+
color: #000;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.time {
|
|
346
|
+
position: absolute;
|
|
347
|
+
z-index: 1000;
|
|
348
|
+
width: 0%;
|
|
349
|
+
height: 3px;
|
|
350
|
+
background-color: #f1683a;
|
|
351
|
+
left: 0;
|
|
352
|
+
top: 0;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* Slider carousel animations */
|
|
356
|
+
&.next {
|
|
357
|
+
.list {
|
|
358
|
+
.item {
|
|
359
|
+
&:nth-child(1) {
|
|
360
|
+
img {
|
|
361
|
+
width: 150px;
|
|
362
|
+
height: 220px;
|
|
363
|
+
position: absolute;
|
|
364
|
+
bottom: 50px;
|
|
365
|
+
left: 50%;
|
|
366
|
+
border-radius: 30px;
|
|
367
|
+
animation: showImage 0.5s linear 1 forwards;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.arrows {
|
|
374
|
+
button {
|
|
375
|
+
pointer-events: none;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.thumbnail {
|
|
380
|
+
animation: effectNext 0.5s linear 1 forwards;
|
|
281
381
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
382
|
+
.item {
|
|
383
|
+
&:nth-last-child(1) {
|
|
384
|
+
overflow: hidden;
|
|
385
|
+
animation: showThumbnail 0.5s linear 1 forwards;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
.time {
|
|
391
|
+
animation: runningTime var(--_animationDuration) linear 1 forwards;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
&.prev {
|
|
396
|
+
.list {
|
|
397
|
+
.item {
|
|
398
|
+
&:nth-child(2) {
|
|
399
|
+
z-index: 2;
|
|
400
|
+
|
|
401
|
+
img {
|
|
402
|
+
animation: outFrame 0.5s linear 1 forwards;
|
|
403
|
+
position: absolute;
|
|
404
|
+
bottom: 0;
|
|
405
|
+
left: 0;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.content {
|
|
409
|
+
.author,
|
|
410
|
+
.title,
|
|
411
|
+
.topic,
|
|
412
|
+
.des,
|
|
413
|
+
.buttons {
|
|
414
|
+
animation: contentOut 1.5s linear 1 forwards !important;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
img {
|
|
419
|
+
z-index: 100;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.item.prepend-item {
|
|
424
|
+
z-index: 1; /* Ensure it's visible */
|
|
425
|
+
/* Any initial styles needed */
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
.arrows {
|
|
430
|
+
button {
|
|
431
|
+
pointer-events: none;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.thumbnail {
|
|
436
|
+
/* Add a transform to the entire thumbnail container */
|
|
437
|
+
animation: effectPrev 0.5s linear 1 forwards;
|
|
438
|
+
|
|
439
|
+
.item {
|
|
440
|
+
&:nth-child(1) {
|
|
441
|
+
overflow: hidden;
|
|
442
|
+
animation: showThumbnailPrev 0.5s linear 1 forwards;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.item.prepend-item {
|
|
447
|
+
opacity: 0;
|
|
448
|
+
transform: translateX(-20px);
|
|
449
|
+
/* Initial state for thumbnail animation */
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
.time {
|
|
453
|
+
animation: runningTime var(--_animationDuration) linear 1 forwards;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
293
456
|
}
|
|
457
|
+
|
|
294
458
|
@keyframes showContent {
|
|
295
459
|
to {
|
|
296
460
|
transform: translateY(0px);
|
|
@@ -298,28 +462,7 @@ watch(
|
|
|
298
462
|
opacity: 1;
|
|
299
463
|
}
|
|
300
464
|
}
|
|
301
|
-
|
|
302
|
-
animation-delay: 1.2s !important;
|
|
303
|
-
}
|
|
304
|
-
.carousel .list .item:nth-child(1) .content .topic {
|
|
305
|
-
animation-delay: 1.4s !important;
|
|
306
|
-
}
|
|
307
|
-
.carousel .list .item:nth-child(1) .content .des {
|
|
308
|
-
animation-delay: 1.6s !important;
|
|
309
|
-
}
|
|
310
|
-
.carousel .list .item:nth-child(1) .content .buttons {
|
|
311
|
-
animation-delay: 1.8s !important;
|
|
312
|
-
}
|
|
313
|
-
/* create animation when next click */
|
|
314
|
-
.carousel.next .list .item:nth-child(1) img {
|
|
315
|
-
width: 150px;
|
|
316
|
-
height: 220px;
|
|
317
|
-
position: absolute;
|
|
318
|
-
bottom: 50px;
|
|
319
|
-
left: 50%;
|
|
320
|
-
border-radius: 30px;
|
|
321
|
-
animation: showImage 0.5s linear 1 forwards;
|
|
322
|
-
}
|
|
465
|
+
|
|
323
466
|
@keyframes showImage {
|
|
324
467
|
to {
|
|
325
468
|
bottom: 0;
|
|
@@ -330,22 +473,12 @@ watch(
|
|
|
330
473
|
}
|
|
331
474
|
}
|
|
332
475
|
|
|
333
|
-
.carousel.next .thumbnail .item:nth-last-child(1) {
|
|
334
|
-
overflow: hidden;
|
|
335
|
-
animation: showThumbnail 0.5s linear 1 forwards;
|
|
336
|
-
}
|
|
337
|
-
.carousel.prev .list .item img {
|
|
338
|
-
z-index: 100;
|
|
339
|
-
}
|
|
340
476
|
@keyframes showThumbnail {
|
|
341
477
|
from {
|
|
342
478
|
width: 0;
|
|
343
479
|
opacity: 0;
|
|
344
480
|
}
|
|
345
481
|
}
|
|
346
|
-
.carousel.next .thumbnail {
|
|
347
|
-
animation: effectNext 0.5s linear 1 forwards;
|
|
348
|
-
}
|
|
349
482
|
|
|
350
483
|
@keyframes effectNext {
|
|
351
484
|
from {
|
|
@@ -353,22 +486,6 @@ watch(
|
|
|
353
486
|
}
|
|
354
487
|
}
|
|
355
488
|
|
|
356
|
-
/* running time */
|
|
357
|
-
|
|
358
|
-
.carousel .time {
|
|
359
|
-
position: absolute;
|
|
360
|
-
z-index: 1000;
|
|
361
|
-
width: 0%;
|
|
362
|
-
height: 3px;
|
|
363
|
-
background-color: #f1683a;
|
|
364
|
-
left: 0;
|
|
365
|
-
top: 0;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
.carousel.next .time,
|
|
369
|
-
.carousel.prev .time {
|
|
370
|
-
animation: runningTime 3s linear 1 forwards;
|
|
371
|
-
}
|
|
372
489
|
@keyframes runningTime {
|
|
373
490
|
from {
|
|
374
491
|
width: 100%;
|
|
@@ -378,18 +495,6 @@ watch(
|
|
|
378
495
|
}
|
|
379
496
|
}
|
|
380
497
|
|
|
381
|
-
/* prev click */
|
|
382
|
-
|
|
383
|
-
.carousel.prev .list .item:nth-child(2) {
|
|
384
|
-
z-index: 2;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
.carousel.prev .list .item:nth-child(2) img {
|
|
388
|
-
animation: outFrame 0.5s linear 1 forwards;
|
|
389
|
-
position: absolute;
|
|
390
|
-
bottom: 0;
|
|
391
|
-
left: 0;
|
|
392
|
-
}
|
|
393
498
|
@keyframes outFrame {
|
|
394
499
|
to {
|
|
395
500
|
width: 150px;
|
|
@@ -400,23 +505,6 @@ watch(
|
|
|
400
505
|
}
|
|
401
506
|
}
|
|
402
507
|
|
|
403
|
-
.carousel.prev .thumbnail .item:nth-child(1) {
|
|
404
|
-
overflow: hidden;
|
|
405
|
-
opacity: 0;
|
|
406
|
-
animation: showThumbnail 0.5s linear 1 forwards;
|
|
407
|
-
}
|
|
408
|
-
.carousel.next .arrows button,
|
|
409
|
-
.carousel.prev .arrows button {
|
|
410
|
-
pointer-events: none;
|
|
411
|
-
}
|
|
412
|
-
.carousel.prev .list .item:nth-child(2) .content .author,
|
|
413
|
-
.carousel.prev .list .item:nth-child(2) .content .title,
|
|
414
|
-
.carousel.prev .list .item:nth-child(2) .content .topic,
|
|
415
|
-
.carousel.prev .list .item:nth-child(2) .content .des,
|
|
416
|
-
.carousel.prev .list .item:nth-child(2) .content .buttons {
|
|
417
|
-
animation: contentOut 1.5s linear 1 forwards !important;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
508
|
@keyframes contentOut {
|
|
421
509
|
to {
|
|
422
510
|
transform: translateY(-150px);
|
|
@@ -424,11 +512,32 @@ watch(
|
|
|
424
512
|
opacity: 0;
|
|
425
513
|
}
|
|
426
514
|
}
|
|
515
|
+
|
|
516
|
+
@keyframes effectPrev {
|
|
517
|
+
from {
|
|
518
|
+
transform: translateX(-150px);
|
|
519
|
+
}
|
|
520
|
+
to {
|
|
521
|
+
transform: translateX(0);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
@keyframes showThumbnailPrev {
|
|
526
|
+
from {
|
|
527
|
+
opacity: 0;
|
|
528
|
+
transform: translateX(-20px);
|
|
529
|
+
}
|
|
530
|
+
to {
|
|
531
|
+
opacity: 1;
|
|
532
|
+
transform: translateX(0);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
427
536
|
@media screen and (max-width: 678px) {
|
|
428
|
-
.
|
|
537
|
+
.slider-gallery .list .item .content {
|
|
429
538
|
padding-right: 0;
|
|
430
539
|
}
|
|
431
|
-
.
|
|
540
|
+
.slider-gallery .list .item .content .title {
|
|
432
541
|
font-size: 30px;
|
|
433
542
|
}
|
|
434
543
|
}
|
package/package.json
CHANGED