gpt4 book ai didi

javascript - 使用 FLIP 技术构建页面布局

转载 作者:行者123 更新时间:2023-12-04 17:13:57 26 4
gpt4 key购买 nike

我是编程初学者,我正在尝试使用 React 中的 FLIP 技术构建页面布局,但我卡住了,所以我想寻求您的帮助。有关 FLIP 技术的更多信息,请参阅引用 URL。
很快,我想构建一个页面布局,它由一个主要内容和多个子内容组成,如下图所示,可以通过单击子内容与主要内容重新定位。
enter image description here
我找到了一种类似于我想通过网上冲浪创建的布局,并将其包含在下面作为引用 URL。
・我试过的。
我认为我可以使用钩子(Hook)、CSS 和 react-flip-toolkit -library- 来实现这一点。事实上,交换两个元素位置的代码很容易实现。
enter image description here
https://codesandbox.io/s/flip-l4o04?file=/src/index.js
但是,我不知道如何编写代码来控制内容数量增加时的行为。
react-flip-toolkit 使用flipkey 作为键,所以如果我只是添加更多容器,onclick 将触发flipper 标签中的所有容器并且它不会工作。
enter image description here
https://codesandbox.io/s/flip-test-f3pqb?file=/src/index.js
接下来,我重写了一些代码。

const AnimatedSquare = () => {
const [active, setActive] = useState(false);
const toggleActive = () => setActive(prevState => !prevState);

const [active1, setActive1] = useState(false);
const toggleActive1 = () => setActive1(prevState => !prevState);

return (
<div>
<Flipper flipKey={active,active1}>
<div className="box">
<Flipped flipId="square">
<div
className={active ? "square" : "square-active"}
onClick={toggleActive}/>
</Flipped>
<Flipped flipId="square1">
<div
className={active1 ? "square-active-1" : "square1"}
onClick={toggleActive1}/>
</Flipped>
enter image description here
现在只有重写的部分代码独立运行,但这还不够好,因为它不能与主要内容一起重新定位。
・问题
我应该编写什么代码来使每个容器独立运行并将其位置与引用 URL 中显示的主要内容交换?我会很感激你的帮助。
~引用网址~
・About the FLIP technique
・What I want to build like this

最佳答案

我想this is你想要什么
我只是在正方形上划分事件状态并累积事件正方形类
如果有一天链接停止打开,我附上下面的代码

import React, { useCallback, useState } from "react";
import ReactDOM from "react-dom";
import { Flipper, Flipped } from "react-flip-toolkit";
import "./styles.css";

const AnimatedSquare = () => {
const [active, setActive] = useState({
square1: true,
square2: false,
square3: false,
square4: false,
square5: false
});
const handleActive = useCallback(
(id) => () =>
setActive({
square1: false,
square2: false,
square3: false,
square4: false,
square5: false,
[id]: true
}),
[]
);

return (
<div>
<Flipper flipKey={true}>
<div className="box">
<Flipped flipId="square1">
<div
className={`square1${active.square1 ? " active" : ""}`}
onClick={handleActive("square1")}
></div>
</Flipped>
<Flipped flipId="square2">
<div
className={`square2${active.square2 ? " active" : ""}`}
onClick={handleActive("square2")}
/>
</Flipped>
</div>
<Flipped flipId="square3">
<div
className={`square3${active.square3 ? " active" : ""}`}
onClick={handleActive("square3")}
/>
</Flipped>
<Flipped flipId="square4">
<div
className={`square4${active.square4 ? " active" : ""}`}
onClick={handleActive("square4")}
/>
</Flipped>
<Flipped flipId="square5">
<div
className={`square5${active.square5 ? " active" : ""}`}
onClick={handleActive("square5")}
/>
</Flipped>
</Flipper>
</div>
);
};

ReactDOM.render(<AnimatedSquare />, document.querySelector("#root"));
* {
box-sizing: border-box;
}

body {
justify-content: left;
align-items: left;
min-height: 100vh;
}

.box {
position: relative;
}

.square1 {
transition: all 1s;
margin-top: 10px;
margin-left: 5px;
margin-right: 5px;
width: 17rem;
height: 12rem;
cursor: pointer;
background-image: linear-gradient(45deg, rgb(0, 255, 0), rgb(71, 182, 108));
}

.square2 {
transition: all 1s;
margin-top: 10px;
margin-left: 5px;
margin-right: 5px;
width: 17rem;
height: 12rem;
cursor: pointer;
background-image: linear-gradient(45deg, rgb(255, 0, 255), rgb(182, 71, 158));
}

.square3 {
transition: all 1s;
margin-top: 10px;
margin-left: 5px;
margin-right: 5px;
width: 17rem;
height: 12rem;
cursor: pointer;
background-image: linear-gradient(
45deg,
rgb(113, 206, 234),
rgb(60, 107, 170)
);
}

.square4 {
transition: all 1s;
margin-top: 10px;
margin-left: 5px;
margin-right: 5px;
width: 17rem;
height: 12rem;
cursor: pointer;
background-image: linear-gradient(45deg, rgb(253, 72, 0), rgb(170, 110, 60));
}

.square5 {
transition: all 1s;
margin-top: 10px;
margin-left: 5px;
margin-right: 5px;
width: 17rem;
height: 12rem;
cursor: pointer;
background-image: linear-gradient(45deg, rgb(255, 0, 0), rgb(182, 71, 71));
}

.active {
position: fixed;
top: 0;
transform: translateX(300px);
width: 75rem;
height: 50rem;
cursor: pointer;
}

关于javascript - 使用 FLIP 技术构建页面布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69024998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com