显式动画
参考文档:
https://gitee.com/openharmony/docs/blob/5654c2b940ab3e2f4f0baf435e630c4ef3536428/zh-cn/application-dev/reference/arkui-ts/ts-explicit-animation.md
来看一个简单的示例:
@Entry
@Component
structAnimationPage{
//位移属性
@State_translate:TranslateOptions={
x:0,
y:0,
z:0
}
build(){
Flex({
alignItems:ItemAlign.Center,
justifyContent:FlexAlign.Center,
direction:FlexDirection.Column
}){
Button('执行动画').margin({bottom:50}).onClick(()=>{
//添加一个简单显式动画
animateTo({
duration:1000,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
},()=>{
//闭包内更改状态
this._translate={
x:0,
y:100,
z:0
}
})
})
Column(){
Text('Animate.css')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.fontColor('#351c75')
.translate(this._translate)//位移变换
}
}
.width('100%')
.height('100%')
}
}
如果我们希望向下位移完成后,再向右位移,就需要在第一个动画完成后再进行第二个动画,即在第一个动画的 onFinish 函数中执行第二个动画。
这样组合起来可以构成一个更复杂的连续动画:
//单步动画执行函数
animationStep(value:AnimateParam,event:()=>void){
return()=>{
returnnewPromise((resolve)=>{
letonFinish=value.onFinish
value.onFinish=()=>{
if(onFinish)onFinish()
resolve(true)
}
animateTo(value,event)
})
}
}
创建 4 步动画:
aboutToAppear(){
//每步动画执行时长
lettime=200
this.step1=this.animationStep({
duration:time,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
onFinish:()=>{
//动画执行完成
console.info('playend')
}
},()=>{
//闭包内更改状态
this._translate={
x:0,
y:100,
z:0
}
})
this.step2=this.animationStep({
duration:time,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
onFinish:()=>{
//动画执行完成
console.info('playend')
}
},()=>{
//闭包内更改状态
this._translate={
x:100,
y:100,
z:0
}
})
this.step3=this.animationStep({
duration:time,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
onFinish:()=>{
//动画执行完成
console.info('playend')
}
},()=>{
//闭包内更改状态
this._translate={
x:100,
y:0,
z:0
}
})
this.step4=this.animationStep({
duration:time,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
onFinish:()=>{
//动画执行完成
console.info('playend')
}
},()=>{
//闭包内更改状态
this._translate={
x:0,
y:0,
z:0
}
})
}
顺序执行 4 步动画:
Button('执行动画').margin({bottom:50}).onClick(async()=>{
awaitthis.step1()
awaitthis.step2()
awaitthis.step3()
awaitthis.step4()
})
实现 AnimateCSS 动画
AnimateCSS:
https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.css
https://animate.style/
pulse 动画:看下 pulse 动画样式代码:
.animate__pulse{
-webkit-animation-name:pulse;
animation-name:pulse;
-webkit-animation-timing-function:ease-in-out;
animation-timing-function:ease-in-out;
}
@keyframespulse{
from{
-webkit-transform:scale3d(1,1,1);
transform:scale3d(1,1,1);
}
50%{
-webkit-transform:scale3d(1.05,1.05,1.05);
transform:scale3d(1.05,1.05,1.05);
}
to{
-webkit-transform:scale3d(1,1,1);
transform:scale3d(1,1,1);
}
}
ETS 实现:
@State_scale:ScaleOptions={
x:1,
y:1,
z:1
}
...
Column(){
Text('Animate.css')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.fontColor('#351c75')
.translate(this._translate)//位移变换
.scale(this._scale)//比例变化
}
动画方法:
-
传递一个动画总时长 time
-
第一步动画执行段为 0%-50%,所以动画执行时长为总时长time * 50%
- 第二步动画执行段为 50%-100%,所以动画执行时长为总时长time * 50%
asyncpulse(time){
//0%-50%
letstep1=this.animationStep({
duration:time*0.5,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
},()=>{
this._scale={
x:1.05,
y:1.05,
z:1.05
}
})
//50%-100%
letstep2=this.animationStep({
duration:time*0.5,//动画时长
tempo:0.5,//播放速率
curve:Curve.EaseInOut,//动画曲线
delay:0,//动画延迟
iterations:1,//播放次数
playMode:PlayMode.Normal,//动画模式
},()=>{
this._scale={
x:1,
y:1,
z:1
}
})
awaitstep1()
awaitstep2()
}
执行动画:
Button('执行PULSE动画').margin({bottom:50}).onClick(async()=>{
this.pulse(500)
})
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
3903浏览量
61310 -
Harmony
+关注
关注
0文章
51浏览量
2517
原文标题:在鸿蒙上实现AnimateCSS动画
文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
OpenHarmony实战开发-如何实现组件动画。
ArkUI为组件提供了通用的属性动画和转场动画能力的同时,还为一些组件提供了默认的动画效果。例如,List的滑动动效,Button的点击动效,是组件自带的默认动画效果。在组件默认
鸿蒙开发之发动画篇
动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指
open harmony照明开关应用介绍
开关。 open harmony照明开关是一种基于智能家居技术的照明控制装置,它可以与家中的灯饰设备进行连接,并通过无线通信技术实现开关控制、亮度调节、颜色变换等功能。与传统的物理开关相比,open harmony照明开关具有以
利用 MPLAB® Harmony v3 TCP/IP协议栈在SAM E54 MCU 上实现文件传输协议
电子发烧友网站提供《利用 MPLAB® Harmony v3 TCP/IP协议栈在SAM E54 MCU 上实现文件传输协议.pdf》资料免费下载
发表于 12-18 11:03
•0次下载
labview如何制作动画
在LabVIEW中制作动画主要依赖于图形图表(Graph Chart)和波形图表(Waveform Chart)。这两种图表都可以显示动态数据,并通过调整图表中的参数来实现动
HT for Web (Hightopo) 使用心得(5)- 动画的实现
其实,在 HT for Web 中,有多种手段可以用来实现动画。我们这里仍然用直升机为例,只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画(Hightopo 使用心
HarmonyOS属性动画开发示例(ArkTS)
介绍
利用 ArkUI 组件不仅可以实现属性变化引起的属性动画,也可以实现父组件状态变化引起子组件产生动画效果,这种动画为显式
发表于 11-23 15:31
利用MPLAB Harmony v3在Cortex-M7 MCU上实现QSPI的就地执行(XIP)功能
电子发烧友网站提供《利用MPLAB Harmony v3在Cortex-M7 MCU上实现QSPI的就地执行(XIP)功能.pdf》资料免费下载
发表于 09-20 14:54
•0次下载
利用MPLAB Harmony v3在SAM E54单片机(MCU)上实现双存储区自举程序
电子发烧友网站提供《利用MPLAB Harmony v3在SAM E54单片机(MCU)上实现双存储区自举程序.pdf》资料免费下载
发表于 09-20 14:53
•0次下载
使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序
电子发烧友网站提供《使用MPLAB Harmony v3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序.pdf》资料免费下载
发表于 09-20 14:52
•1次下载
开发指导—利用组件&插值器动画实现HarmonyOS动效
一. 组件动画
在组件上创建和运行动画的快捷方式。具体用法请参考通用方法。
获取动画对象
通过调用animate方法获得animat
发表于 09-05 11:33
使用Raspberry Pi和Arduino实现Web控制的LED动画
电子发烧友网站提供《使用Raspberry Pi和Arduino实现Web控制的LED动画.zip》资料免费下载
发表于 07-03 14:52
•0次下载
如何在OpenHarmony上实现逐帧动画?
逐帧动画是常见的一种动画呈现形式,本例就为大家介绍如何通过 translate(),setInterval(),clearAllInterval() 等方法实现逐帧动画。
评论