@@ -25,9 +29,10 @@ const ButtomPanel = () => {
@@ -35,4 +40,4 @@ const ButtomPanel = () => {
);
};
-export default ButtomPanel;
+export default ComplexButtomPanel;
diff --git a/src/components/complexPage/FloorLayout.tsx b/src/components/complexPage/FloorLayout.tsx
index 27da03d..82805df 100644
--- a/src/components/complexPage/FloorLayout.tsx
+++ b/src/components/complexPage/FloorLayout.tsx
@@ -1,5 +1,5 @@
const FloorLayout = () => {
- return <>>;
+ return
;
};
export default FloorLayout;
diff --git a/src/components/complexPage/SequenceSlider.tsx b/src/components/complexPage/SequenceSlider.tsx
index 950aa4c..9710ae1 100644
--- a/src/components/complexPage/SequenceSlider.tsx
+++ b/src/components/complexPage/SequenceSlider.tsx
@@ -5,9 +5,9 @@ import { isMobile } from "react-device-detect";
import { useSwipeable } from "react-swipeable";
import { Transition } from "react-transition-group";
import Button from "../Button";
-import ActiveResizeIcon from "../icons/ActiveResizeIcon";
import LeftArrowSliderIcon from "../icons/LeftArrowSliderIcon";
import RightArrowSliderIcon from "../icons/RightArrowSliderIcon";
+import useSequence from "../../store/useSequence";
// const marks = [
// {
@@ -54,26 +54,32 @@ interface SequenceSliderProps {
function SequenceSlider({ path }: SequenceSliderProps) {
const [selectedImageRightIndex, setSelectedRightImageIndex] =
useState
(keyframes[3]);
- const [selectedImageLeftIndex, setSelectedImageLeftIndex] = useState(
- arrayLength - keyframes[3]
- );
+ const [selectedImageLeftKeyframe, setSelectedImageLeftKeyframe] =
+ useState(arrayLength - keyframes[3]);
const [isAnimate, setIsAnimate] = useState(false);
-
+ const [loadedImages, setLoadedImages] = useState(0);
const [keyframeIndex, setKeyframeIndex] = useState(3);
+ const { setCurrentCompassRotate, currentCompassRotate } = useSequence();
+ const [width, setWidth] = useState();
+ const [top, setTop] = useState();
+
+ useEffect(() => {
+ setCurrentCompassRotate(keyframes[3]);
+ }, []);
+
const handlers = useSwipeable({
trackMouse: true,
onSwipedLeft: () => !isAnimate && next(),
onSwipedRight: () => !isAnimate && prev(),
});
- const [loadedImages, setLoadedImages] = useState(0);
-
function handleLoad() {
setLoadedImages((prev) => prev + 1);
}
function animateToRight(currentOffset: number) {
const obj = { selectedImageIndex: selectedImageRightIndex };
+ setCurrentCompassRotate(currentCompassRotate + currentOffset);
gsap.to(obj, {
selectedImageIndex: selectedImageRightIndex + currentOffset,
@@ -81,12 +87,15 @@ function SequenceSlider({ path }: SequenceSliderProps) {
ease: "power1.inOut",
onUpdate: () => {
const roundedIndex = Math.round(obj.selectedImageIndex);
+
if (roundedIndex >= arrayLength) {
setSelectedRightImageIndex(roundedIndex - arrayLength);
- setSelectedImageLeftIndex(arrayLength - (roundedIndex - arrayLength));
+ setSelectedImageLeftKeyframe(
+ arrayLength - (roundedIndex - arrayLength)
+ );
} else {
setSelectedRightImageIndex(roundedIndex);
- setSelectedImageLeftIndex(arrayLength - roundedIndex);
+ setSelectedImageLeftKeyframe(arrayLength - roundedIndex);
}
},
onComplete: () => {
@@ -96,21 +105,23 @@ function SequenceSlider({ path }: SequenceSliderProps) {
}
function animateToLeft(currentOffset: number) {
- const obj = { selectedImageIndex: selectedImageLeftIndex };
+ const obj = { selectedImageIndex: selectedImageLeftKeyframe };
+ setCurrentCompassRotate(currentCompassRotate - currentOffset);
gsap.to(obj, {
- selectedImageIndex: selectedImageLeftIndex + currentOffset,
+ selectedImageIndex: selectedImageLeftKeyframe + currentOffset,
duration: 0.75,
ease: "power1.inOut",
onUpdate: () => {
const roundedIndex = Math.round(obj.selectedImageIndex);
+
if (roundedIndex > arrayLength) {
setSelectedRightImageIndex(
arrayLength - (roundedIndex - arrayLength)
);
- setSelectedImageLeftIndex(roundedIndex - arrayLength);
+ setSelectedImageLeftKeyframe(roundedIndex - arrayLength);
} else {
- setSelectedImageLeftIndex(roundedIndex);
+ setSelectedImageLeftKeyframe(roundedIndex);
setSelectedRightImageIndex(arrayLength - roundedIndex);
}
},
@@ -148,9 +159,6 @@ function SequenceSlider({ path }: SequenceSliderProps) {
animateToLeft(currentOffset);
}
- const [width, setWidth] = useState();
- const [top, setTop] = useState();
-
function handleResize() {
setWidth(window.innerWidth);
setTop(window.innerWidth / 2 - window.innerHeight / 2);
diff --git a/src/pages/Complex.tsx b/src/pages/Complex.tsx
index 70955b7..148f913 100644
--- a/src/pages/Complex.tsx
+++ b/src/pages/Complex.tsx
@@ -1,4 +1,4 @@
-import ButtomPanel from "../components/ButtomPanel";
+import ComplexButtomPanel from "../components/complexPage/ComplexButtomPanel";
import ComplexTopPanel from "../components/complexPage/ComplexTopPanel";
import SequenceSlider from "../components/complexPage/SequenceSlider";
@@ -8,7 +8,8 @@ const Complex = () => {
-
+ {/* */}
+
);
};
diff --git a/src/store/useSequence.tsx b/src/store/useSequence.tsx
new file mode 100644
index 0000000..cbbec41
--- /dev/null
+++ b/src/store/useSequence.tsx
@@ -0,0 +1,14 @@
+import { create } from "zustand";
+
+interface SequenceStore {
+ currentCompassRotate: number;
+ setCurrentCompassRotate: (keyframe: number) => void;
+}
+
+const useSequence = create