gpt4 book ai didi

reactjs - 如何使用 MUI 以编程方式显示 "ripple effect"?

转载 作者:行者123 更新时间:2023-12-04 07:52:27 24 4
gpt4 key购买 nike

基本上是标题。我想在我的 MUI 按钮集合上手动显示涟漪效果 - 当我单击按钮时涟漪效果起作用,但我找不到以编程方式显示涟漪效果的方法。

我是否需要禁用 MUI 的涟漪效应,然后制作我自己的涟漪效应函数,我可以附加到 onClick

{this.buttons.map((button) => (
<React.Fragment key={button.name}>
{button.render ? (
<div className="col-3">
<Button
autoFocus={true}
className="w-100 p-3"
variant="contained"
color="primary"
classes={{root: classes.button}}
disableElevation
onClick={() => {updateState(button.onClick(text))}}
>
{button.keyCode}
</Button>
</div>
) : (<></>)}
</React.Fragment>
))}

最佳答案

Button 使用 ButtonBase使用 TouchRipple在引擎盖下。下面是一段 ButtonBase 定义:

function ButtonBase(props) {
// ...

return (
<ButtonBaseRoot>
{children}
<TouchRipple ref={rippleRef} center={centerRipple} {...TouchRippleProps} />
</ButtonBaseRoot>
)
}

没有 API 可以手动触发涟漪。它是在按钮内部处理的,因此为了做到这一点,您需要创建和控制 MUI 提供的您自己的波纹组件:

import TouchRipple from '@mui/material/ButtonBase/TouchRipple';
const rippleRef = React.useRef(null);
const buttonRef = React.useRef(null);
const triggerRipple = () => {
const container = buttonRef.current;
const rect = container.getBoundingClientRect();

rippleRef.current.start(
{
clientX: rect.left + rect.width / 2,
clientY: rect.top + rect.height / 2,
},
// when center is true, the ripple doesn't travel to the border of the container
{ center: false },
);

setTimeout(() => rippleRef.current.stop({}), 320);
};

return (
<div>
<Button onClick={triggerRipple}>start ripple</Button>
<Box display="flex" justifyContent="center" m={10}>
<Button
variant="contained"
color="primary"
ref={buttonRef}
sx={{ display: 'relative' }}
>
My little ripple
<TouchRipple ref={rippleRef} center />
</Button>
</Box>
</div>
);

现场演示

Codesandbox Demo

相关回答

关于reactjs - 如何使用 MUI 以编程方式显示 "ripple effect"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66888248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com