【问题标题】:React, Material UI, Select, disableScrollLock, make menu position relative to anchorReact,Material UI,Select,disableScrollLock,使菜单位置相对于锚点
【发布时间】:2020-02-15 03:36:46
【问题描述】:
import React from "react";
import "./styles.css";

import Input from "@material-ui/core/Input";
import MenuItem from "@material-ui/core/MenuItem";
import FormControl from "@material-ui/core/FormControl";
import Select from "@material-ui/core/Select";

const names = [
  "Oliver Hansen",
  "Van Henry",
  "April Tucker",
  "Ralph Hubbard",
  "Omar Alexander",
  "Carlos Abbott",
  "Miriam Wagner",
  "Bradley Wilkerson",
  "Virginia Andrews",
  "Kelly Snyder"
];

const ITEM_HEIGHT = 48;
const ITEM_PADDING_TOP = 8;
const MenuProps = {
  PaperProps: {
    style: {
      maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
      width: 250
    }
  },
  disableScrollLock: true
};

export default function App() {
  const [personName, setPersonName] = React.useState([]);

  const handleChange = event => {
    setPersonName(event.target.value);
  };

  return (
    <div className="App" style={{ height: "1000px" }}>
      <FormControl>
        <Select
          labelId="demo-mutiple-name-label"
          id="demo-mutiple-name"
          multiple
          value={personName}
          onChange={handleChange}
          input={<Input />}
          MenuProps={MenuProps}
        >
          {names.map(name => (
            <MenuItem key={name} value={name}>
              {name}
            </MenuItem>
          ))}
        </Select>
      </FormControl>
    </div>
  );
}

代码也可以在这里找到https://codesandbox.io/s/awesome-leaf-ooko1

我正在使用 React 16,最新的 Material UI 核心,Material UI Select Component

我在这里尝试做的是当我打开下拉菜单(disableScrollLock=true)时,当我滚动窗口时,下拉菜单将相对于未固定在窗口上的锚元素。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript reactjs material-ui


    【解决方案1】:

    我不熟悉 React,但我设法找到了一个具有不同组件的工作示例。

    看到这个答案:https://stackoverflow.com/a/54011607/152016

    Coder 使用 ReportComboBox 而不是 Select,但他解决了您的 sn-p 的另一个问题:增加选择大小。

    当您在 sn-p 中选择很多项目时,会出现 UI 问题。

    够离题了,我已经更改了答案的 sn-p 以启用滚动(例如,通过设置 body { height: 3000px; },您可以看到滚动将选择框保持在原位:https://codesandbox.io/s/react-select-ellipsis-one-row-example-k62hy

    希望这足以解决问题或至少提供线索。

    【讨论】:

    • 谢谢,我需要能够滚动的窗口,下拉菜单不是固定在屏幕上而是在父元素上。我正在寻找 Material UI select 的解决方案,看看是否可行
    • 好吧,最后一个代码框的选择不是固定在屏幕上的,当您滚动它时,它会像静态选择一样离开视口。而且您的原始沙盒中也存在问题,有很多用户选择,这在我谈到的答案中得到了解决。
    猜你喜欢
    • 2019-07-26
    • 2020-04-26
    • 2019-08-07
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多