按住这块面板
import { Card, Center, Ripple, Text } from '@hina-ui/react'
export default function Demo() {
return (
<Card className="hn-interactive relative isolate w-full max-w-sm cursor-pointer overflow-hidden">
<Ripple />
<Center className="h-20">
<Text size="sm" tone="muted">
按住这块面板
</Text>
</Center>
</Card>
)
}
tsx
用法
import { Ripple } from '@hina-ui/react'
ts
Ripple 放进需要按压反馈的元素内部,涟漪从手指或指针的落点扩散开。Button 一类的控件已经内置,只有自制的可按压区域才需要手动加。
宿主元素有三个要求:建立定位与层叠上下文(relative isolate)、裁切溢出(overflow-hidden),以及自身就是响应按压的那一层——组件把指针监听挂在父元素上。涟漪会继承宿主的圆角,不需要重复设置。
可按压
disabled,无涟漪
import { Card, Center, Inline, Ripple, Text } from '@hina-ui/react'
export default function Demo() {
return (
<Inline gap="md" align="stretch" className="w-full">
<Card className="hn-interactive relative isolate flex-1 cursor-pointer overflow-hidden">
<Ripple />
<Center className="h-20">
<Text size="sm" tone="muted">
可按压
</Text>
</Center>
</Card>
<Card className="relative isolate flex-1 overflow-hidden">
<Ripple disabled />
<Center className="h-20">
<Text size="sm" tone="faint">
disabled,无涟漪
</Text>
</Center>
</Card>
</Inline>
)
}
tsx
行为
- 涟漪从落点开始扩散,尺寸按宿主对角线计算,因此大小面板都能铺满。
- 按下时间过短时仍会播完最短时长,避免快速点击只看到一闪。
- 触摸操作有一小段延迟才起效,用于区分点击与滑动,滑动时不出现涟漪。
- 指针在按下后移出宿主范围会取消,回到范围内可继续。
- 系统开启减弱动态效果时不播放扩散。
- 强制颜色模式下整体不渲染。
无障碍
- 组件带
aria-hidden,是纯装饰,不进入无障碍树。 - 它不提供任何语义或交互,宿主自身必须是可聚焦、可操作的元素,键盘用户的反馈由焦点环与状态层承担。
API
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
disabled | boolean | false | 是否停用涟漪 |