[微信小程序] 当动画(animation)遇上延时执行函数(setTimeout)出现的问题

本文介绍了解决小程序中animation动画与setTimeout函数结合使用时出现的this指向问题的方法,并详细解析了问题产生的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小程序中当动画animation遇上setTimeout函数内部使用this.setData函数,通常情况下会出现报错,先告诉解决方法后分析报错原因

解决方法:

在 setTimeout() 函数的同级上面加上 const that = this;   ,然后将this.setData换成that.setData就好了

贴上我的代码示例:

 1 getMsg:  function () {
 2     const that = this;
 3     // 动画内容
 4     this.animation.translate(-115, -140).step(),
 5     this.animation.translate(-100, -120).step(),
 6     this.setData({
 7     animation_bar_a: this.animation.export(),
 8     //定时器
 9     setTimeout(function () {
10        that.setData({
11           to_cover: 'none'
12        })
13     }, 1000)
14 }

 

2.分析报错原因

1)先看一下animation动画生成步骤

A.创建一个动画实例animation

B.调用实例的方法来描述动画。

C.最后通过动画实例的export方法导出动画数据传递给组件的animation属性。

2)在getMsg()函数中如果不加const that = this;则到达setTimeout函数内,此时的this指代的是上个动画函数的匿名对象,此时用this当然就报错啦。因为此时this的意义已经改变了,那么怎么办呢,直接在this改变前将this保存下来即可,即在动画生效前加上const that = this。

此时this就被保存在了that里,然后调用that代替this即可。

 

 

如果还有不懂的欢迎文章下评论哦,有问必答!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值