-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTeamPhotos.tsx
More file actions
66 lines (57 loc) · 1.87 KB
/
Copy pathTeamPhotos.tsx
File metadata and controls
66 lines (57 loc) · 1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"use client";
import Image from "next/image";
import { useState, useEffect } from "react";
import { TEAM_PHOTOS } from "@/data/teamPhotos";
export default function TeamPhotos() {
const [currentIndex, setCurrentIndex] = useState(0);
const [isVisible, setIsVisible] = useState(true);
useEffect(() => {
// Random interval between 10-15 seconds (10000-15000ms)
const getRandomInterval = () => Math.floor(Math.random() * 5000) + 10000;
const shufflePhoto = () => {
setIsVisible(false);
setTimeout(() => {
setCurrentIndex((prevIndex) => {
// Get a random index different from current
let newIndex;
do {
newIndex = Math.floor(Math.random() * TEAM_PHOTOS.length);
} while (newIndex === prevIndex && TEAM_PHOTOS.length > 1);
return newIndex;
});
setIsVisible(true);
}, 500); // Fade out duration
};
const intervalId = setInterval(shufflePhoto, getRandomInterval());
return () => clearInterval(intervalId);
}, []);
return (
<div>
<div className="overflow-hidden rounded-lg">
<div
className={`transition-opacity duration-500 ${
isVisible ? "opacity-100" : "opacity-0"
}`}
>
<Image
src={TEAM_PHOTOS[currentIndex].url}
alt={`${TEAM_PHOTOS[currentIndex].date} - ${TEAM_PHOTOS[currentIndex].location}`}
width={0}
height={0}
sizes="100vw"
className="h-auto w-full object-cover"
/>
</div>
</div>
<div
className={`mt-3 text-xs text-gray-600 transition-opacity duration-500 ${
isVisible ? "opacity-100" : "opacity-0"
}`}
>
<p className="font-semibold">
{TEAM_PHOTOS[currentIndex].date}, {TEAM_PHOTOS[currentIndex].location}
</p>
</div>
</div>
);
}