javascript - 控制嵌套手风琴部分内的高度
问题描述
我创建了一个手风琴组件,当我尝试使用嵌套级别时,我在手风琴内滚动。我不想在该部分内的手风琴内滚动,而不是页面应该在下面滚动。
我怎么能做到这一点。
应用程序.js
import Accordion from "./Accordion";
export default function App() {
return (
<div>
<Accordion title="Whats lorem ipsum?">
<Accordion title="Whats lorem ipsum?">
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s.
</Accordion>
<Accordion title="Whats lorem ipsum?">
<ul>
<li>
a) Lorem Ipsum is simply dummy text of the printing and
typesetting industry.{" "}
</li>
<li>
b) Lorem Ipsum is simply dummy text of the printing and
typesetting industry.{" "}
</li>
<li>
c) Lorem Ipsum is simply dummy text of the printing and
typesetting industry.{" "}
</li>
<li>
d) Lorem Ipsum is simply dummy text of the printing and
typesetting industry.{" "}
</li>
</ul>
</Accordion>
</Accordion>
<Accordion title="Whats lorem ipsum?">
Lorem Ipsum is simply dummy text of the printing and typesetting
industry. Lorem Ipsum has been the industry's standard dummy text ever
since the 1500s.
</Accordion>
<Accordion title="Whats lorem ipsum?">
<ul>
<li>
a) Lorem Ipsum is simply dummy text of the printing and typesetting
industry.{" "}
</li>
<li>
b) Lorem Ipsum is simply dummy text of the printing and typesetting
industry.{" "}
</li>
<li>
c) Lorem Ipsum is simply dummy text of the printing and typesetting
industry.{" "}
</li>
<li>
d) Lorem Ipsum is simply dummy text of the printing and typesetting
industry.{" "}
</li>
</ul>
</Accordion>
</div>
);
}
我已经添加了工作代码框
任何帮助表示赞赏
解决方案
根据你在codesandbox里面的代码
手风琴/index.js
一些改变很好地检查出来。
import React, { useState, useRef } from "react";
import Chevron from "./Chevron";
import "./style.css";
function Accordion(props) {
const [setActive, setActiveState] = useState("");
const [setHeight, setHeightState] = useState("0px");
const [setRotate, setRotateState] = useState("accordion__icon");
const [setMargin, setMarginState] = useState("0px");
const content = useRef(null);
function toggleAccordion() {
setActiveState(setActive === "" ? "active" : "");
setHeightState(
setActive === "active" ? "0px" : "500px" // set pixel according to your needs
);
setRotateState(
setActive === "active" ? "accordion__icon" : "accordion__icon rotate"
);
setMarginState(setActive === "active" ? "0px" : "1rem");
}
return (
<div className="accordion__section">
<button className={`accordion ${setActive}`} onClick={toggleAccordion}>
<p className="accordion__title">{props.title}</p>
<Chevron className={`${setRotate}`} width={10} fill={"#777"} />
</button>
<div
ref={content}
style={{
maxHeight: `${setHeight}`,
marginBottom: `${setMargin}`,
overflow: "hidden" // set overflow as hidden
}}
className="accordion__content"
>
<div className="accordion__text">{props.children}</div>
</div>
</div>
);
}
export default Accordion;
推荐阅读
- ios - 如何在swiftUI中更改状态栏?
- carthage - 我可以告诉 Carthage 如何构建不使用 xcode 的项目吗?
- python - 如何从经验 cdf 计算和绘制 pdf?
- r - Roxygen2 文档参数乱序
- c# - 为什么我不能将表格调整到显示器的大小?(Windows 窗体)
- ibm-infosphere - 对于任何 ETL 或数据转换工具,IGC 是否允许我跟踪数据的来源或数据的使用方式?
- react-final-form - 提交后如何获取所有值 - 包括未触及的字段
- c# - 程序将无法按计划任务正常运行。手动执行程序运行良好
- ios - 我可以在我的 Mac Catalyst iOS 应用程序上禁用窗口大小调整功能吗
- c# - 如何进行 id 匹配检查并在视图中显示数据