| import './index.scss' | |
| export interface VoiceProps extends CSSPropertyRule { | |
| num?: number; | |
| duration?: number; | |
| } | |
| export default function Voice({ duration = 400, num = 7, ...others }) { | |
| return ( | |
| <div className="voice-button" { ...others }> | |
| {Array.from({ length: num }).map((_, index) => { | |
| const randomDuration = Math.random() * 100 + duration | |
| const initialDelay = Math.random() * 2 * duration | |
| const initialScale = Math.sin((index + 1) * Math.PI / num) | |
| return ( | |
| <div | |
| className="voice-button-item" | |
| key={index} | |
| style={{ | |
| animationDelay: initialDelay + 'ms', | |
| animationDuration: randomDuration + 'ms', | |
| transform: `scale(${initialScale})` | |
| }} | |
| /> | |
| ) | |
| })} | |
| </div> | |
| ) | |
| } | |