App Bar 应用栏
应用栏组件展示了与当前屏幕息息相关的信息和操作。
而顶部应用栏(App Bar)则提供与当前屏幕相关的内容和操作。 该组件常用于展示品牌、展示标题、提供导航和一些可操作的内容。
它既可以用作于转换为上下文相关的操作栏,又可以直接充当导航栏。
<AppBar position="static">
<Toolbar>
<IconButton edge="start" color="inherit" aria-label="menu" sx={{ mr: 2 }}>
<MenuIcon />
</IconButton>
<Typography variant="h6" component="div" sx={{ flexGrow: 1 }}>
News
</Typography>
<Button color="inherit">Login</Button>
</Toolbar>
</AppBar>
<AppBar position="static">
<Toolbar variant="dense">
<IconButton edge="start" color="inherit" aria-label="menu" sx={{ mr: 2 }}>
<MenuIcon />
</IconButton>
<Typography variant="h6" color="inherit" component="div">
Photos
</Typography>
</Toolbar>
</AppBar>
固定的位置
当渲染一个固定位置的应用栏时,元素的尺寸不会影响页面的其余内容。 这可能导致部分内容会被挡在应用程序栏后面,而无法可见。 下面是3种可能的解决方案:
- 使用
position =“ sticky”
代替 fixed。 ⚠️ sticky 不支持 IE11。 - 可以渲染第二个
<Toolbar />
组件:
function App() {
return (
<React.Fragment>
<AppBar position="fixed">
<Toolbar>{/* content */}</Toolbar>
</AppBar>
<Toolbar />
</React.Fragment>
);
}
- 也可以用
theme.mixins.toolbar
的 CSS:
const useStyles = makeStyles((theme) => ({
offset: theme.mixins.toolbar,
}));
function App() {
const classes = useStyles();
return (
<React.Fragment>
<AppBar position="fixed">
<Toolbar>{/* 内容 */}</Toolbar>
</AppBar>
<div className={classes.offset} />
</React.Fragment>
);
}
Scrolling 滚动
您可以使用 useScrollTrigger()
这个 hook 来相应用户触发的滚动操作。
隐藏应用栏
向下滚动会隐藏应用栏,这样一来会留有更多的空间进行阅读。
useScrollTrigger([options]) => trigger
参数
options
(Object [optional]):options.disableHysteresis
(Boolean [optional]):默认值为false
。 禁用迟滞的效果。 在决定trigger
的值时会忽略在滚动的方向。options.target
(Node [optional]):默认值是window
。options.threshold
(Number [optional]):默认值是100
。 严格来说,当垂直滚动超过(但不包括)此阈值时,请更改trigger
的值。
返回结果
trigger
: 此滚动的位置符合要求吗?
例子
import useScrollTrigger from '@material-ui/core/useScrollTrigger';
function HideOnScroll(props) {
const trigger = useScrollTrigger();
return (
<Slide in={!trigger}>
<div>你好</div>
</Slide>
);
}