【HarmonyOS】抖动动画方案
HarmonyOs-demo-抖动动画实现方案
import curves from "@ohos.curves" /** * 1. 手机号输入框: * - 提供一个用于输入手机号码的文本框。 * - 输入类型限制为电话号码,仅接受数字输入。 * - 最大允许输入长度为13位,符合中国手机号码标准。 * - 显示占位提示文字“请输入手机号”,当输入框为空时可见。 * - 自定义样式包括背景色、字体颜色、大小、边框圆角、光标颜色等。 * - 用户输入时,实时更新`textPhone`状态变量存储输入的手机号码。 * * 2. 动画测试按钮: * - 点击此按钮触发`startAnimation`方法,启动输入框的动画效果。 * * 3. 动画实现: * - `startAnimation`方法使用`animateTo`函数创建一个动画。 * - 动画参数说明: * - `duration`: 动画持续时间设为800毫秒。 * - `curve`: 应用`curves.springCurve`生成的Spring Curve动画曲线,模拟物理弹簧效果。 * - `iterations`: 动画只执行一次。 * - `onEnded`: 动画结束后,通过回调函数更新`doScale`状态,将输入框永久放大10%(从1到1.1)。 * - 在启动动画之前,先将`doScale`重置为初始值(1, 1),确保动画从原尺寸开始计算。 * * 注意事项: * * - **动画逻辑**: * - 动画结束后,输入框的缩放状态将永久保留放大后的尺寸。这是通过`onEnded`回调函数实现的。 * - 为了保证动画正确起始,先将`doScale`恢复到初始尺寸(1, 1)再启动动画。 * * - **输入框行为**: * - 用户目前只能在输入框末尾插入或删除字符,无法在中间位置插入光标。这可能是由于`onChange`事件处理方式导致的限制。 */ @Entry @Component export struct test { @State textPhone: string = '' @State doScale: ScaleOptions = { x: 1, y: 1 } startAnimation() { animateTo({ duration: 800, curve: curves.springCurve(0, 10, 80, 10), iterations: 1, }, () => { this.doScale = { x: 1.1, y: 1.1 }; }) this.doScale = { x: 1, y: 1 }; } build() { Column() { TextInput({ text: this.textPhone, placeholder: '请输入手机号' }) .margin({ top: 30 }) // .padding({ left: 0 }) .width('658lpx') .height('96lpx') .scale(this.doScale) .backgroundColor(Color.White) .type(InputType.PhoneNumber) .maxLength(13) .placeholderColor("#CBCBCB") .fontColor("#2E2E2E") .fontSize('36lpx') .caretColor('#FF1919') //设置输入框光标颜色。 // .stateStyles({ //设置按下背景颜色 ,一旦设置上,会导致点击空白输入框区域就清空内容 // pressed: this.txtClcik, // focused: this.txtClcik, // }) .onChange((value: string) => { //解决了会导致点击空白输入框区域就清空内容的问题,但有新问题,用户没办法在中间插入光标 this.textPhone = value }) .borderRadius(40) Button('动画测试').margin({ top: 30 }).onClick(() => { this.startAnimation() }) }.width('100%').height('100%') .backgroundColor("#f5f5f5") } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了