javascript - 在 Material UI 中滚动时折叠一个 AppBar 并同时显示另一个 AppBar
问题描述
我有Header.js
组件。在里面,我有两个 AppBar,第一个 AppBar 是粘性的,第二个不是。默认情况下,只显示第二个 AppBar。当我们滚动时,我希望第二个 AppBar 折叠,第一个 AppBar 显示在屏幕顶部。
我在这里useScrollTrigger()
看到了 Material-ui 文档,但它只显示在滚动时隐藏 AppBar。
// Header.js
import React from "react";
import { AppBar, Toolbar, Typography } from "@material-ui/core";
export default function Header() {
return (
<>
<AppBar position="static">
<Toolbar>
<Typography variant="h6">First AppBar</Typography>
</Toolbar>
</AppBar>
<AppBar position="static">
<Toolbar>
<Typography variant="h6">Second AppBar</Typography>
</Toolbar>
</AppBar>
</>
);
}
这是我的沙盒链接
解决方案
这段代码看起来像你想要的那样运行。我使用了material-ui demo
import React from "react";
import { AppBar, Toolbar, Typography } from "@material-ui/core";
import useScrollTrigger from '@material-ui/core/useScrollTrigger';
import Slide from '@material-ui/core/Slide';
function HideOnScroll(props) {
const { children, window } = props;
const trigger = useScrollTrigger({ target: window ? window() : undefined });
return (
<Slide appear={false} direction="down" in={!trigger}>
{children}
</Slide>
);
}
function ElevationScroll(props) {
const { children, window } = props;
const trigger = useScrollTrigger({
disableHysteresis: true,
threshold: 0,
target: window ? window() : undefined,
});
return React.cloneElement(children, {
elevation: trigger ? 4 : 0,
});
}
export default function Header(props) {
return (
<>
<ElevationScroll {...props}>
<AppBar>
<Toolbar>
<Typography variant="h6">First AppBar</Typography>
</Toolbar>
</AppBar>
</ElevationScroll >
{/* second appbar */}
<HideOnScroll {...props}>
<AppBar>
<Toolbar>
<Typography variant="h6">Second AppBar</Typography>
</Toolbar>
</AppBar>
</HideOnScroll>
</>
);
}
推荐阅读
- ios - 将视图控制器的代码移动到演示者如何更容易在 VIPER 中进行单元测试?
- angular - 在 Angular6 中更新元标记不起作用(查看页面源代码)
- git - 两个标签之间的Git汇总统计
- firebase - 我必须从 Firebase 下载图像才能显示它吗?
- sql - 这个 SQL 是做什么的?
- javascript - 如何在three.js中使用数组而不是MeshFaceMaterial?
- python - 如何设置要在 Flask-Cache 中缓存的 url 的命中数?
- cassandra - Cassandra Apache 查询
- angular - Angular 6:失败:模板解析错误:无法绑定到“routerLink”,因为它不是“a”的已知属性。(
- reactjs - Webpack 4,React 项目,Bundle 大小