[英]How to add ripple effect when clicking Card in MUI
我注意到 TouchRipple 已移出internal
目錄。 它現在位於ButtonBase 文件夾中。
這是我如何通過使用 ButtonBase 組件添加漣漪效果 -
基本上,你包裝你的組件,讓我們說<Card>
<ButtonBase>
<Card>
里面的<Card>
像這樣, ButtonBase
負責為你設置TouchRipple
-
<ButtonBase>
<Card>
....
</Card>
</ButtonBase>
這是工作演示的Codesandbox鏈接。 我知道這不是最好的方法。 您可以直接使用TouchRipple
/ Ripple
組件,但我發現這種方式非常易於使用。
希望這可以幫助。
我可以看到這個問題沒有得到解答,所以我將提供一個最新的解決方案(將其寫為material-ui
is v. 0.18.7 (stable)):
您需要導入波紋高階補償。 (HOC) 為:
import TouchRipple from '@material-ui/core/ButtonBase/TouchRipple';
然后您可以使用TouchRipple
包裝您選擇的任何組件,例如:
<TouchRipple>
<div>
MY RIPPLING DIV
</div>
</TouchRipple>
或者,如果您需要基於 CSS 類的方法,您可以使用 materialize lib -> https://react-materialize.github.io/#/
在這種情況下,就像在 material-ui Button
上為waves
prop 添加一個值一樣簡單,例如:
<Button waves='light'>EDIT ME<Icon left>save</Icon></Button>
@xiaofan2406 中采用的方法對我來說從來沒有用過,更不用說傳遞高度、寬度和位置似乎很容易破壞,並且在使用 flexbox 時可能無法實現。
但是我設法讓它像這樣工作:
<YourComponent>
<TouchRipple>
{children}
</TouchRipple>
</YourComponent>
您可以通過用 Grid 和 props 容器包裝來自定義
import { Button } from "@material-ui/core";
function ImageCard(props){
return (
<Button style={{ padding: 0, borderRadius: "16px" }}>
{/*my custom component you can use any component even material ui component also*/}
<img
src={yourImageUrl}
alt="img"
style={{
height: 200,
width: 400,
borderRadius: "16px",//optional
}}
/>
</Button>
);
}
官方api似乎不支持它。 但這就是我所做的,當我想使用material-ui
漣漪效果時:
使用material-ui/internal/TouchRipple
,看看它的源代碼
用法示例:
<YourComponent>
<TouchRipple style={style}/>
{children}
</YourComponent>
您需要傳遞內聯樣式以指定與YourComponent
的高度、寬度和位置匹配的高度、寬度和位置
單擊Card
時添加漣漪效果的最慣用的方法是使用CardActionArea
。 該組件繼承了ButtonBase
的 props。 它還會在懸停和聚焦時更改Card
背景顏色(與ButtonBase
不同):
<Card>
<CardActionArea>
<CardContent>
{...}
</CardContent>
</CardActionArea>
</Card>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.