diff --git a/package.json b/package.json
index dd17a5f..4f98421 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"react-router-dom": "^6.23.1",
"react-router-hash-link": "^2.4.3",
"react-swipeable": "^7.0.1",
+ "react-usestateref": "^1.0.9",
"usehooks-ts": "^3.1.0",
"zustand": "^4.5.4"
},
diff --git a/src/assets/projects/hangar.png b/src/assets/projects/hangar.png
new file mode 100644
index 0000000..76d1122
Binary files /dev/null and b/src/assets/projects/hangar.png differ
diff --git a/src/assets/projects/laboratory.png b/src/assets/projects/laboratory.png
new file mode 100644
index 0000000..f9b324b
Binary files /dev/null and b/src/assets/projects/laboratory.png differ
diff --git a/src/assets/projects/loader.png b/src/assets/projects/loader.png
new file mode 100644
index 0000000..6b5b352
Binary files /dev/null and b/src/assets/projects/loader.png differ
diff --git a/src/assets/projects/operator.mp4 b/src/assets/projects/operator.mp4
new file mode 100644
index 0000000..5b7f2b0
Binary files /dev/null and b/src/assets/projects/operator.mp4 differ
diff --git a/src/assets/projects/operator.png b/src/assets/projects/operator.png
new file mode 100644
index 0000000..66dc2e5
Binary files /dev/null and b/src/assets/projects/operator.png differ
diff --git a/src/assets/projects/plane.png b/src/assets/projects/plane.png
new file mode 100644
index 0000000..a14da9a
Binary files /dev/null and b/src/assets/projects/plane.png differ
diff --git a/src/assets/projects/train_big.jpg b/src/assets/projects/train_big.jpg
index 6a93e81..b743062 100644
Binary files a/src/assets/projects/train_big.jpg and b/src/assets/projects/train_big.jpg differ
diff --git a/src/assets/projects/trains.png b/src/assets/projects/trains.png
new file mode 100644
index 0000000..d71de10
Binary files /dev/null and b/src/assets/projects/trains.png differ
diff --git a/src/components/Main/Efficiency.tsx b/src/components/Main/Efficiency.tsx
index 129f04b..de37bb1 100644
--- a/src/components/Main/Efficiency.tsx
+++ b/src/components/Main/Efficiency.tsx
@@ -94,7 +94,7 @@ function Figure({
backgroundSize: 'auto,100% 100%',
transition: { duration: 0.075 },
}}
- className="flex px-6 2xl:max-w-[22vw] w-full rounded-2xl pt-6 bg-no-repeat bg-[position:bottom_right_24px,bottom_right] h-[262px] relative before:bg-[#14161F] before:w-full after:h-full after:-mt-6 after:-ml-6 after:absolute after:-z-[9999] after:rounded-2xl"
+ className="flex px-6 2xl:max-w-[22vw] w-full rounded-2xl pt-6 bg-no-repeat bg-[position:bottom_right_24px,bottom_right] h-[262px] relative"
>
{title}
diff --git a/src/components/Main/Products/Products.tsx b/src/components/Main/Products/Products.tsx
index d92b93b..df7e4ea 100644
--- a/src/components/Main/Products/Products.tsx
+++ b/src/components/Main/Products/Products.tsx
@@ -35,7 +35,7 @@ export function Products() {
+
diff --git a/src/components/Main/Projects.tsx b/src/components/Main/Projects.tsx
index 8bef6b6..87c22f5 100644
--- a/src/components/Main/Projects.tsx
+++ b/src/components/Main/Projects.tsx
@@ -5,6 +5,21 @@ import { Title } from '../../ui/Title';
import { useSwipeable } from 'react-swipeable';
import { ArrowLeftIcon } from '../icons/ArrowLeftIcon';
import { ArrowRightIcon } from '../icons/ArrowRightIcon';
+import { PauseIcon } from '../icons/PauseIcon';
+import { PlayIcon } from '../icons/PlayIcon';
+import useStateRef from 'react-usestateref';
+
+enum Media {
+ video,
+ img,
+}
+
+interface IProject
{
+ src: TMedia extends Media.img ? string : string[];
+ title: string;
+ tags: string[];
+ media?: TMedia;
+}
export function Projects() {
return (
@@ -20,19 +35,49 @@ export function Projects() {
,
+ {
+ src: 'src/assets/projects/plane.png',
+ tags: ['Симулятор', 'VR-приложение'],
+ title: 'L 410 NG Aircraft',
+ media: Media.img,
+ },
+ {
+ src: 'src/assets/projects/hangar.png',
+ tags: ['Симулятор', 'VR-приложение'],
title: 'Сборка-разборка вертолётного двигателя',
+ media: Media.img,
+ },
+ {
+ src: 'src/assets/projects/trains.png',
+ tags: ['Симулятор', 'VR-приложение'],
+ title: 'Тренажер РЖД: ЭП2Д, Иволга, ЭП20, ТЭ33А, ТЭМ2',
+ media: Media.img,
+ },
+ {
+ src: 'src/assets/projects/laboratory.png',
+ tags: ['Симулятор', 'VR-приложение'],
+ title: 'Учебная лаборатория определения жирности молока',
+ media: Media.img,
},
{
src: 'src/assets/projects/train_big.jpg',
tags: ['Симулятор'],
title: 'Симулятор машиниста',
+ media: Media.img,
},
]}
/>
@@ -40,22 +85,62 @@ export function Projects() {
);
}
-function Project({
- src,
- title,
- tags,
-}: {
- src: string;
- title: string;
- tags: string[];
-}) {
+function Project({ src, title, tags, media }: IProject) {
+ const [buffering, setBuffering] = useState(true);
+ const [playing, setPlaying, playingRef] = useStateRef(false);
+
+ const videoRef = useRef(null);
+
+ useEffect(() => console.log(buffering), [buffering]);
+ useEffect(() => console.log(playingRef), [playingRef]);
+ useEffect(() => console.log(playing), [playing]);
+
return (
-
-
-
+
+ {media === Media.img ? (
+
+ ) : (
+
+
+ )}
+
{title}
{tags.map(tag => (
@@ -72,11 +157,7 @@ function Project({
);
}
-function Slider({
- projects,
-}: {
- projects: { src: string; title: string; tags: string[] }[];
-}) {
+function Slider({ projects }: { projects: IProject
[] }) {
const width = useWindowWidth();
const baseOffset =
width >= 1024 ? width * 0.39 : width >= 640 ? width * 0.67 : width - 20;
@@ -90,10 +171,10 @@ function Slider({
switch (action) {
case 'prev':
setSliderOffset(prev => prev - baseOffset);
- return [state[state.length - 2], ...state.slice(0, -1)];
+ return [state[state.length - 5], ...state.slice(0, -1)];
case 'next':
setSliderOffset(prev => prev + baseOffset);
- return [...state.slice(1), state[state.length - 3]];
+ return [...state.slice(1), state[4]];
default:
return state;
}
@@ -174,7 +255,7 @@ function Slider({