到目前为止,在API(v3.9.2
)中,我看到TouchRippleProps
代表https://material-ui.com/api/button-base/的ButtonBase
我的按钮看起来像
<Button variant="text"
size={"large"}
fullWidth
className={classes.button}
>
{value}
</Button>
,我的按钮style
是。
button: {
backgroundColor: colors.surface,
borderRadius: 0, // to make buttons sharp edged
touchRipple: colors.primary
}
当我触摸按钮时,我看到白色背景(参见数字5
)为
我的问题是,当我触摸按钮时,如何将背景从white
更改为blue
,然后使其消失?
答案 0 :(得分:2)
通过对您的numberPadStyle
进行以下更改,我实现了合理的行为:
const numberPadStyle = theme => ({
button: {
backgroundColor: colors.surface,
borderRadius: 0, // to make buttons sharp edged
"&:hover": {
backgroundColor: colors.primary,
// Reset on touch devices, it doesn't add specificity
"@media (hover: none)": {
backgroundColor: colors.surface,
"&:active": {
backgroundColor: colors.primary
}
}
},
"&:active": {
backgroundColor: colors.primary
}
}
});
触摸屏的问题在于,触摸会触发“悬停”效果,并且直到您触摸其他地方时,触摸效果才会消失。 "@media (hover: none)"
以触摸设备(https://developer.mozilla.org/en-US/docs/Web/CSS/@media/hover)的悬停效果为目标。触摸/点击期间,“活动的” CSS有效,然后Button
中内置的涟漪处理其余部分。
您当然可以根据需要调整悬停和活动颜色。
答案 1 :(得分:-2)
除了波纹之外,没有其他动画。但是,您可以创建类似以下TriggeredAnimation
包装器组件的内容:
class TriggeredAnimationWrapper extends Component {
constructor(...args) {
super(...args)
this.state = {
wasClicked: false
}
this.triggerAnimation = this.triggerAnimation.bind(this)
}
triggerAnimation(callback) {
return (...args) => {
this.setState(
{wasClicked: true},
() => requestAnimationFrame(()=>this.setState({wasClicked: false}))
)
if (callback) return callback(...args)
}
}
render() {
const {
triggerAnimation,
props: {
children
},
state: {
wasClicked
}
} = this.props
return children({wasClicked, triggerAnimation})
}
}
并像这样使用它:
<TriggeredAnimationWrapper>({wasClicked, triggerAnimation}) => (
<Button
onClick={triggerAnimation((e) => console.log('clicked', e))}
className={wasClicked ? 'clicked' : ''}
/>
)</TriggeredAnimationWrapper>
然后,您可以创建一个CSS动画,并在出现click类时更改背景。