React + Material-UI |如何创建水平滚动卡片?

Posted

技术标签:

【中文标题】React + Material-UI |如何创建水平滚动卡片?【英文标题】:React + Material-UI | How to create horizontal scroll cards? 【发布时间】:2020-11-10 08:42:32 【问题描述】:

我正在尝试创建一个反应组件,它将显示 3 张卡片,每张卡片都包含来自水平数组的一些信息。会有左/右按钮允许用户水平来回滚动到另外 3 张卡片,直到阵列完成。

我一直在做一些研究,并且很难找到轻松完成这项任务的解决方案。这是我第一次使用 Material-UI,所以这一切都很新。

我可以做些什么来获得我正在寻找的东西?是否可以为 Material-UI 提供某种滚动功能以轻松创建这些左/右滚动按钮?

谢谢!

示例:

【问题讨论】:

【参考方案1】:

您需要按钮,还是只需要水平滚动条?这是一个带有图像的水平滚动部分的简单示例:

import React from 'react';
import  makeStyles  from '@material-ui/core/styles';
import GridList from '@material-ui/core/GridList';
import GridListTile from '@material-ui/core/GridListTile';
import GridListTileBar from '@material-ui/core/GridListTileBar';

const useStyles = makeStyles((theme) => (
  root: 
    display: 'flex',
    flexWrap: 'wrap',
    justifyContent: 'space-around',
    overflow: 'hidden',
  ,
  gridList: 
    flexWrap: 'nowrap'
  
));

const tileData = [

  img: 'images/image1.jpg',
  title: 'title'
,

  img: 'images/image2.jpg',
  title: 'title'
,

  img: 'images/image3.jpg',
  title: 'title'

];

export default function SingleLineGridList() 
  const classes = useStyles();

  return (
    <div className=classes.root>
      <GridList className=classes.gridList cols=2.5>
        tileData.map((tile) => (
          <GridListTile key=tile.img>
            <img src=tile.img alt=tile.title />            
            <GridListTileBar
              title=tile.title
            />
          </GridListTile>
        ))
      </GridList>
    </div>
  );


我认为对于按钮,您需要为 3 的每个部分设置 &lt;div&gt;,并在每个按钮上设置 href=#id

【讨论】:

@alex 我正在寻找完全相同的东西,您是否找到任何解决该问题的方法,请更新?【参考方案2】:

您可以使用下面的代码来完成它。我已经使用了一些 CSS 属性来使其工作。这将移除额外使用的箭头来水平滚动。

我在 Netflix 克隆应用中使用过它。这是一个行组件。我在我的主页中使用了它,并将不同类型的电影列表传递给它。根据类型,它将连续显示不同的电影。

 <div className="row">
  /* title */
  <h2>title</h2>
  /* container -> posters */
  <div className="row__posters">
    /* several row posters */
    movies.map((movie) => (
      <img
        key=movie.id            
        className="row__poster row__posterLarge"
        src=`$image_base_url$
          isLargeRow ? movie.poster_path : movie.backdrop_path
        `
        alt=movie.name
      />
    ))
  </div>
</div>

以下是用于上述组件的 CSS。

.row 
  margin-left: 20px;
  color: white;


.row__posters 
  display: flex;
  overflow-x: scroll;
  overflow-y: hidden;
  padding: 20px;


.row__posters::-webkit-scrollbar 
  display: none;


.row__poster 
  width: 100%;
  object-fit: contain;
  max-height: 100px;
  margin-right: 10px;
  transition: transform 450ms;


.row__posterLarge 
  max-height: 250px;


.row__posterLarge:hover 
  transform: scale(1.09);


.row__poster:hover 
  transform: scale(1.08);

【讨论】:

【参考方案3】:

也许您可以尝试使用这样的库:

react-material-ui-carousel

不要将图像放入此组件,而是尝试放入卡片。

【讨论】:

请用sn-p代码解释一下。

以上是关于React + Material-UI |如何创建水平滚动卡片?的主要内容,如果未能解决你的问题,请参考以下文章

Material-UI Typescript 如何在组件类中从 makeStyle() 创建样式实例

如何使用 react-testing-library 测试包装在 withStyles 中的样式化 Material-UI 组件?

如何使用 Material-UI 创建 onSubmit

如何覆盖(覆盖)material-ui(React)中的类和样式

如何使用Material-UI创建此可滚动网格状视图?

如何使用 Typescript 为 React 设置 Material-UI?