https://lottiefiles.com/free-animation/ ... ax5xjzqdq8 brmaly , что имеет различные фреймы, которые имеют различные фрейсы, которые имеют различные фрейсы, которые могут быть в Manual Set-an-drack-tright, и nack-trighat Нажмите, однако мне также необходимо установить начальный кадр анимации Lottie на основе предпочтения темы пользователя, хранящегося в LocalStorage .
Проблема, которую я возникает, заключается в том, что Lottie всегда по умолчанию по умолчанию 0, что означает, что тема пользователя является темным режимом, лотти-дискретизация будет отображаться. PrettyPrint-Override ">
Код: Выделить всё
import React, { useEffect, useState, useRef } from "react";
import Lottie from "lottie-react";
import darkModeToggle from "./assets/dark-mode-lottie.json";
const DarkModeToggle = () => {
const initialTheme = localStorage.getItem("theme");
const [isDarkMode, setIsDarkMode] = useState(initialTheme === "dark");
const lottieRef = useRef(null);
useEffect(() => {
const root = document.documentElement;
const metaThemeColor = document.querySelector('meta[name="theme-color"]');
const themeColor = isDarkMode ? "#000000" : "#f1f5f9";
if (isDarkMode) {
root.setAttribute("data-theme", "dark");
localStorage.setItem("theme", "dark");
metaThemeColor.content = themeColor;
} else {
root.removeAttribute("data-theme");
localStorage.setItem("theme", "light");
metaThemeColor.content = themeColor;
}
}, [isDarkMode]);
const handleClick = () => {
if (lottieRef.current) {
if (isDarkMode) {
setIsDarkMode((prev) => !prev);
lottieRef.current?.playSegments([120, 150], true);
} else {
setIsDarkMode((prev) => !prev);
lottieRef.current?.playSegments([30, 50], true);
}
}
};
useEffect(() => {
if (lottieRef.current) {
const initialFrame = initialTheme === "dark" ? 30 : 0;
lottieRef.current?.goToAndStop(initialFrame, true);
}
}, []);
return (
);
};
export default DarkModeToggle;
Подробнее здесь: https://stackoverflow.com/questions/795 ... localstora
Мобильная версия