package animation import ( "fmt" "strings" ) // GradientAnimation 渐变动画 type GradientAnimation struct { BaseAnimation Colors []string // 渐变颜色列表 Animate bool // 是否添加动画效果 } // NewGradientAnimation 创建一个渐变动画 func NewGradientAnimation(targetID string, colors []string, duration float64, repeatCount int, animate bool) *GradientAnimation { return &GradientAnimation{ BaseAnimation: BaseAnimation{ Type: Gradient, Duration: duration, RepeatCount: repeatCount, Delay: 0, TargetID: targetID, Attributes: make(map[string]string), }, Colors: colors, Animate: animate, } } // GenerateSVG 生成渐变动画的SVG代码 func (a *GradientAnimation) GenerateSVG() string { var sb strings.Builder // 创建渐变定义 gradientID := fmt.Sprintf("%s-gradient", a.TargetID) sb.WriteString(fmt.Sprintf("\n", gradientID)) // 添加渐变颜色 for i, color := range a.Colors { offset := float64(i) / float64(len(a.Colors)-1) * 100 sb.WriteString(fmt.Sprintf(" \n", offset, color)) } sb.WriteString("\n") // 为目标元素添加样式引用 sb.WriteString(fmt.Sprintf("\n", a.TargetID, gradientID)) // 添加动画 if a.Animate { // x1 动画 sb.WriteString(fmt.Sprintf(" 0 { sb.WriteString(fmt.Sprintf("repeatCount=\"%d\" ", a.RepeatCount)) } sb.WriteString("/>\n") // x2 动画 sb.WriteString(fmt.Sprintf(" 0 { sb.WriteString(fmt.Sprintf("repeatCount=\"%d\" ", a.RepeatCount)) } sb.WriteString("/>\n") } return sb.String() }