React js 中 lottie 动画的屏幕大小调整
Screen Resizing for lottie animation in React js
我在一个网站上工作,该网站的登录页面上有一个 lottie 动画,我该如何调整 lottie 组件的大小,以便在移动设备上将显示设置为 none。
下面的lottie组件
import React from "react";
import Lottie from "react-lottie";
import data from "./Lottie/87736-car-animation.json";
export default function App() {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: data,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice",
},
};
return (
<div id="lottie">
<Lottie
options={defaultOptions}
height={800}
width={1000}
style={{
top: "30%",
right: "10%",
zIndex: -1,
overflow: "hidden",
position: "fixed",
}}
/>
</div>
);
}
这是主页组件。
import Lottie from "../Components/Lottie";
import React from "react";
function Landing () => {
let width = window.innerWidth;
if (width > 600px) {
console.log(width);
} else {
document.getElementById("lottie").style.display = "none";
}
<Lottie className="col-lg-8 col-sm-12 lottie d-none" />
}
export default Landing;
我也试过使用外部 CSS
@media screen and (max-width: 600px) {
.lottie {
display: none !important;
}
}
你的 css 不会影响你的 lottie 因为 .lottie
是一个 class 但你的 lottie 被定义为一个 id,所以使用 #lottie
代替:
@media screen and (max-width: 600px) {
#lottie {
display: none !important;
}
}
在 <Lottie />
中删除 d-none
并添加 d-lg-block d-md-block d-sm-none d-none
就可以了
所以问题是,通过 React,您可以有条件地渲染组件,而无需使用原生 dom 操作,例如 document.getElementById
.
首先,让我们尝试简化获得 windows 尺码的方式:
创建某种可以在其他地方重用的导出函数
windowDimensions.js
export function getWindowDimensions() {
const { innerWidth: width, innerHeight: height } = window;
return {
width,
height
};
}
然后将其导入您的应用程序
import React from "react";
import Lottie from "react-lottie";
import data from "./Lottie/87736-car-animation.json";
import {getWindowDimensions} from './windowDimensions.js';
export default function App() {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: data,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice",
},
};
return (
<div id="lottie">
// Here we use our conditional rendering
{ getWindowDimensions().width > 600 &&
<Lottie
options={defaultOptions}
height={800}
width={1000}
style={{
top: "30%",
right: "10%",
zIndex: -1,
overflow: "hidden",
position: "fixed",
}}
/>
</div>
}
);
}
如果 window 宽度大于 600,此代码将只渲染你的 lottie 组件。当然,你仍然可以使用 css 条件渲染,你的代码似乎可以。也许尝试使用 visibility: hidden
代替您的媒体查询。小心,你在你的反应代码中定义了一个 id lottie
,它应该在你的 css 中用作 #lottie
。您目前在 css 中将其用作 .lottie
,它指的是 class。这可能就是您的 css 方法不起作用的原因。
最后,我还要看一下您添加到 lottie 组件中的 classes 指的是什么。
希望这能给你一个开始调查的地方。
这里有一些关于条件渲染的docs。
我在一个网站上工作,该网站的登录页面上有一个 lottie 动画,我该如何调整 lottie 组件的大小,以便在移动设备上将显示设置为 none。
下面的lottie组件
import React from "react";
import Lottie from "react-lottie";
import data from "./Lottie/87736-car-animation.json";
export default function App() {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: data,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice",
},
};
return (
<div id="lottie">
<Lottie
options={defaultOptions}
height={800}
width={1000}
style={{
top: "30%",
right: "10%",
zIndex: -1,
overflow: "hidden",
position: "fixed",
}}
/>
</div>
);
}
这是主页组件。
import Lottie from "../Components/Lottie";
import React from "react";
function Landing () => {
let width = window.innerWidth;
if (width > 600px) {
console.log(width);
} else {
document.getElementById("lottie").style.display = "none";
}
<Lottie className="col-lg-8 col-sm-12 lottie d-none" />
}
export default Landing;
我也试过使用外部 CSS
@media screen and (max-width: 600px) {
.lottie {
display: none !important;
}
}
你的 css 不会影响你的 lottie 因为 .lottie
是一个 class 但你的 lottie 被定义为一个 id,所以使用 #lottie
代替:
@media screen and (max-width: 600px) {
#lottie {
display: none !important;
}
}
在 <Lottie />
中删除 d-none
并添加 d-lg-block d-md-block d-sm-none d-none
就可以了
所以问题是,通过 React,您可以有条件地渲染组件,而无需使用原生 dom 操作,例如 document.getElementById
.
首先,让我们尝试简化获得 windows 尺码的方式:
创建某种可以在其他地方重用的导出函数
windowDimensions.js
export function getWindowDimensions() {
const { innerWidth: width, innerHeight: height } = window;
return {
width,
height
};
}
然后将其导入您的应用程序
import React from "react";
import Lottie from "react-lottie";
import data from "./Lottie/87736-car-animation.json";
import {getWindowDimensions} from './windowDimensions.js';
export default function App() {
const defaultOptions = {
loop: true,
autoplay: true,
animationData: data,
rendererSettings: {
preserveAspectRatio: "xMidYMid slice",
},
};
return (
<div id="lottie">
// Here we use our conditional rendering
{ getWindowDimensions().width > 600 &&
<Lottie
options={defaultOptions}
height={800}
width={1000}
style={{
top: "30%",
right: "10%",
zIndex: -1,
overflow: "hidden",
position: "fixed",
}}
/>
</div>
}
);
}
如果 window 宽度大于 600,此代码将只渲染你的 lottie 组件。当然,你仍然可以使用 css 条件渲染,你的代码似乎可以。也许尝试使用 visibility: hidden
代替您的媒体查询。小心,你在你的反应代码中定义了一个 id lottie
,它应该在你的 css 中用作 #lottie
。您目前在 css 中将其用作 .lottie
,它指的是 class。这可能就是您的 css 方法不起作用的原因。
最后,我还要看一下您添加到 lottie 组件中的 classes 指的是什么。
希望这能给你一个开始调查的地方。
这里有一些关于条件渲染的docs。