0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Harmony上实现AnimateCSS动画

OpenHarmony技术社区 来源:OpenHarmony技术社区 作者:OpenHarmony技术社区 2022-04-26 11:00 次阅读

显式动画

ef6f74ee-c480-11ec-bce3-dac502259ad0.png参考文档:
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%')
}
}
ef7b3022-c480-11ec-bce3-dac502259ad0.gif

如果我们希望向下位移完成后,再向右位移,就需要在第一个动画完成后再进行第二个动画,即在第一个动画的 onFinish 函数中执行第二个动画。

ef8a0ee4-c480-11ec-bce3-dac502259ad0.gif

这样组合起来可以构成一个更复杂的连续动画

//单步动画执行函数
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 动画:efa67a5c-c480-11ec-bce3-dac502259ad0.gif

看下 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)
})

efc6b9d4-c480-11ec-bce3-dac502259ad0.gif

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4338

    浏览量

    62773
  • Harmony
    +关注

    关注

    0

    文章

    53

    浏览量

    2618

原文标题:在鸿蒙上实现AnimateCSS动画

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DSP实现DDR2 PCB布局布线

    电子发烧友网站提供《DSP实现DDR2 PCB布局布线.pdf》资料免费下载
    发表于 10-15 09:16 0次下载
    <b class='flag-5'>在</b>DSP<b class='flag-5'>上</b><b class='flag-5'>实现</b>DDR2 PCB布局布线

    ESP8266 太空人动画的 OLED 显示

    ESP8266 太空人动画的 OLED 显示
    的头像 发表于 10-08 15:06 306次阅读
    ESP8266 太空人<b class='flag-5'>动画</b>的 OLED 显示

    图片动画控件和Video image控件的使用方法

    UI开发过程中,序列帧基本是绕不开的,AWTK 支持多种方法实现序列帧显示,本文介绍图片动画控件和Video image控件的使用方法。
    的头像 发表于 08-06 16:44 989次阅读
    图片<b class='flag-5'>动画</b>控件和Video image控件的使用方法

    多FPGA集群实现高级并行编程

    今天我们看的这篇论文介绍了多FPGA集群实现高级并行编程的研究,其主要目标是为非FPGA专家提供一个成熟且易于使用的环境,以便在多个并行运行的设备扩展高性能计算(HPC)应用。
    的头像 发表于 07-24 14:54 1326次阅读

    【AWTK使用经验】如何实现序列帧动画

    目前想在AWTK中显示炫酷流畅的图片动画,此时可以用video_image控件来播放序列帧动画。本篇文章将介绍该控件的原理和使用方法。图1ZTP800示教器运行v
    的头像 发表于 07-18 08:25 444次阅读
    【AWTK使用经验】如何<b class='flag-5'>实现</b>序列帧<b class='flag-5'>动画</b>

    通过视频帧提取及批量取模转换实现基于STC32的点阵LED动画播放

    通过视频帧提取及批量取模转换实现基于STC32的点阵LED动画播放
    的头像 发表于 06-27 02:16 401次阅读
    通过视频帧提取及批量取模转换<b class='flag-5'>实现</b>基于STC32的点阵LED<b class='flag-5'>动画</b>播放

    请问DMA是怎么电路(硬件实现数据转运的?

    DMA是怎么电路(硬件实现数据转运的?
    发表于 05-24 07:24

    HarmonyOS开发案例:【转场动画

    本教程中,我们将会通过一个简单的样例,学习如何基于ArkTS的声明式开发范式开发转场动画。其中包含页面间转场、组件内转场以及共享元素转场。
    的头像 发表于 05-06 15:42 1086次阅读
    HarmonyOS开发案例:【转场<b class='flag-5'>动画</b>】

    OpenHarmony实战开发-如何实现动画

    请求动画帧 请求动画帧时通过requestAnimationFrame函数逐帧回调,调用该函数时传入一个回调函数。 runframe调用requestAnimationFrame时
    发表于 05-06 14:11

    HarmonyOS开发案例:【自定义下拉刷新动画

    主要介绍组件动画animation属性设置。当组件的某些通用属性变化时,可以通过属性动画实现渐变效果,提升用户体验。
    的头像 发表于 04-29 16:06 992次阅读
    HarmonyOS开发案例:【自定义下拉刷新<b class='flag-5'>动画</b>】

    OpenHarmony实战开发-如何实现组件动画

    ArkUI为组件提供了通用的属性动画和转场动画能力的同时,还为一些组件提供了默认的动画效果。例如,List的滑动动效,Button的点击动效,是组件自带的默认动画效果。
    的头像 发表于 04-28 15:49 647次阅读
    OpenHarmony实战开发-如何<b class='flag-5'>实现</b>组件<b class='flag-5'>动画</b>。

    HarmonyOS开发案例:【动画

    使用动画样式,实现几种常见动画效果:平移、旋转、缩放以及透明度变化。
    的头像 发表于 04-25 15:13 488次阅读
    HarmonyOS开发案例:【<b class='flag-5'>动画</b>】

    生成式 AI 制作动画:周期短、成本低!

      电子发烧友网报道(文/李弯弯)生成式AI动画市场中的应用正在迅速崛起。根据市场机构数据,预计到2023年生成式AI动画市场的规模将达到177亿美元,年复合增长率为35.7%。
    的头像 发表于 03-18 08:19 3683次阅读
    生成式 AI 制作<b class='flag-5'>动画</b>:周期短、成本低!

    鸿蒙开发之发动画

    动画的原理是一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定
    的头像 发表于 02-01 15:25 649次阅读
    鸿蒙开发之发<b class='flag-5'>动画</b>篇

    探索阀门奥秘:80种阀门结构原理动画

    分享80个阀门结构原理动画,一次看过瘾!
    发表于 01-19 11:22 1002次阅读
    探索阀门奥秘:80种阀门结构原理<b class='flag-5'>动画</b>