【问题标题】:React js material ui Accordion draggable resizeReact js材料ui手风琴可拖动调整大小
【发布时间】:2021-09-06 05:07:44
【问题描述】:

从图片中可以看出,我有两个手风琴,一个在左侧 (30%),一个在右侧 (70%),当我单击按钮时,右侧的一个消失,左侧的一个变为 (100%)。

我想做的是有可能通过可拖动的移动来调整左右两个元素的大小。

链接:codesandbox

代码:

import React, { useState } from "react";
import Typography from "@material-ui/core/Typography";
import ExpandMoreIcon from "@material-ui/icons/ExpandMore";
import {
  makeStyles,
  Accordion,
  AccordionSummary,
  AccordionDetails,
  Tooltip
} from "@material-ui/core";
import { Visibility, VisibilityOff } from "@material-ui/icons";
const useStyles = makeStyles((theme) => ({
  root: {
    width: "100%"
  },
  heading: {
    fontSize: theme.typography.pxToRem(15),
    fontWeight: theme.typography.fontWeightRegular
  }
}));

export default function SimpleAccordion() {
  const classes = useStyles();
  const [showPreview, setShowPreview] = useState(true);
  const handleChangeCheck = () => {
    setShowPreview((prev) => !prev);
  };
  return (
    <div className={classes.root}>
      <Tooltip title={showPreview ? "Show" : "Hide"} placement="bottom" arrow>
        {showPreview ? (
          <Visibility
            onClick={handleChangeCheck}
            style={{ cursor: "pointer" }}
          />
        ) : (
          <VisibilityOff
            onClick={handleChangeCheck}
            style={{ cursor: "pointer" }}
          />
        )}
      </Tooltip>
      <div
        style={{
          display: "flex"
        }}
      >
        <div
          style={{
            width: showPreview ? "30%" : "100%",
            minHeight: "500px",
            marginTop: 7,
            transition: "width 1s, height 4s"
          }}
        >
          <Accordion defaultExpanded>
            <AccordionSummary
              expandIcon={<ExpandMoreIcon />}
              aria-controls="panel1a-content"
              id="panel1a-header"
            >
              <Typography className={classes.heading}>Accordion 1</Typography>
            </AccordionSummary>
            <AccordionDetails>
              <Typography>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                Suspendisse malesuada lacus ex, sit amet blandit leo lobortis
                eget.
              </Typography>
            </AccordionDetails>
          </Accordion>
        </div>
        {showPreview && (
          <div
            style={{
              width: "70%",
              height: "100vh",
              float: "right",
              marginTop: 7,
              marginLeft: 5
            }}
          >
            <Accordion defaultExpanded>
              <AccordionSummary
                expandIcon={<ExpandMoreIcon />}
                aria-controls="panel2a-content"
                id="panel2a-header"
              >
                <Typography className={classes.heading}>Accordion 2</Typography>
              </AccordionSummary>
              <AccordionDetails>
                <Typography>
                  Lorem ipsum dolor sit amet, consectetur adipiscing elit.
                  Suspendisse malesuada lacus ex, sit amet blandit leo lobortis
                  eget.
                </Typography>
              </AccordionDetails>
            </Accordion>
          </div>
        )}
      </div>
    </div>
  );
}

【问题讨论】:

    标签: javascript reactjs material-ui accordion draggable


    【解决方案1】:

    在这里我找到了一些可以帮助您实现目标的软件包

    react-panelgroup

    这是我为您制作的关于上述包裹的示例 https://codesandbox.io/s/resizable-panels-for-react-forked-0o7p4?file=/src/App.js:348-364

    第一

    import PanelGroup from "react-panelgroup";
    

    然后像这样使用它

      <PanelGroup direction="row" borderColor="grey">
              <Accordion classes={classes} />
              <Accordion classes={classes} />
              <Accordion classes={classes} />
            </PanelGroup>
    

    你可以自定义每个元素的最小宽度和高度

    <PanelGroup
      panelWidths={[
        { size: 100, minSize: 50, resize: 'dynamic' },
        { minSize: 100, resize: 'stretch' },
        { size: 100, minSize: 50, resize: 'dynamic' }
      ]}
    >
    

    还要检查

    react-reflex文档https://leefsmp.github.io/Re-Flex/index.html

    【讨论】:

    • 它似乎在代码沙箱中工作,但是当我在我的生产代码中尝试它时,我得到一个奇怪的错误:i.stack.imgur.com/8LjXx.png
    • 在您从沙盒复制的代码末尾删除此部分const rootElement = document.getElementById("root"); ReactDOM.render(&lt;App /&gt;, rootElement);
    • 我认为这是问题
    • 我没有复制那部分,我只是复制了ResizablePanelsReturnAccordion里面的内容。
    • 好吧,这很奇怪 :),我正在努力解决
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2015-11-05
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多