今天 我们来说 组件内转场动画
我们可以先编写代码如下
@Entry
@Component
struct Index {
@State flag:boolean = true;
build() {
Column({space: 30}) {
Button("转换").onClick(()=> {
})
Image("https://img1.baidu.com/it/u=1699929707,733321099&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800")
.width(200)
}
.width('100%')
.height('100%')
}
}
定义了一个 状态变量 叫 flag 类型为 布尔 默认值给了个true
然后 定义了一个button按钮 定义了一个点击事件 还没有写内容
下面放了个image图片组件
然后 我们将 Column 组件内的内容改成这样
Button(this.flag?"隐藏":"显示").onClick(()=> {
this.flag = !this.flag;
})
if(this.flag){
Image("https://img1.baidu.com/it/u=1699929707,733321099&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800")
.width(200)
}
我们通过 flag 控制 image组件的显示
然后 按钮的点击事件 取反 就是 如果是 true 就赋值 false 如果是false就赋值trrue
我们点击一次 就会赋值为false image图片就没了
然后再点一下 就变成 true 图片就又出来了
但是 目前是没有任何动画效果的
这里 我们用一个新的方法 transition
我们这样写
Image("https://img1.baidu.com/it/u=1699929707,733321099&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800")
.width(200)
.transition({
type: TransitionType.
})
然后下面就会弹出提示 告诉我们 TransitionType 下的三种类型
其中
Insert 组件加载时动画
Delete 组件销魂时动画
All 加载和移除 都附带动画
这里 我们选择 All
但是 现在我们会看到 点击后依旧是 马上显示和马上消失 并没有什么动画效果
因为 这里 我们还是要写它的动画属性
我们将 Column 组件内的代码改写如下
Button(this.flag?"隐藏":"显示").onClick(()=> {
animateTo({
duration: 3000,
curve: Curve.Linear,
//delay: 2000,
iterations: 3,
playMode: PlayMode.Alternate,
onFinish: (()=>{
console.log("动画结束");
})
},()=>{
this.flag = !this.flag;
})
})
if(this.flag){
Image("https://img1.baidu.com/it/u=1699929707,733321099&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800")
.width(200)
.transition({
type: TransitionType.All
})
}
我们在点击事件 中调用 animateTo 还是第一个参数是 json的动画参数配置
第二个参数则是 需要执行的逻辑
此时我们点击 它就会有个渐渐虚化 消失的动画了
然后 我们动画还可以做的再花哨一点
将 if 下的代码 改写如下
if(this.flag){
Image("https://img1.baidu.com/it/u=1699929707,733321099&fm=253&fmt=auto&app=120&f=JPEG?w=1422&h=800")
.width(200)
.transition({
type: TransitionType.Insert,
translate: {x: 200,y: 100}
})
}
这里 我们用 Insert 表示加载时 触发动画
translate 这里 我们控制 x轴 200 y轴 100 表示 插入时从这个位置插入进来
我们点击隐藏后 然后点击显示
会发现 它是从我们指定的位置进入 然后 回归正常位置的
然后 我们还可以设置 透明度
通过 opacity 字段实现属性控制
还是点击隐藏 然后点击显示
这时 我们动画刚进来是指定的位置 然后是透明的 然后一点一点恢复正常位置 透明度慢慢减掉 元素完全展示出来
我们还可以控制它的旋转 rotate
设置 我们元素默认更新进来 是一个循环 80度的效果
然后会慢慢旋转会正常状态
350度 则是转一整圈
最后 如果你都想单独设置 组件加载和移除 那么 就用两个 transition 控制 加载/移除 也是可以的