1***@qq.com
1***@qq.com
  • 发布:2019-08-02 14:12
  • 更新:2020-05-26 00:20
  • 阅读:1257

动画无效问题

分类:uni-app
html代码  
<view class="page-block guess-u-like">  
            <view class="single-like-movie" v-for="(guessULike,index) in guessULikeList" :key="index">  
                <image :src="guessULike.cover" class="like-movie-img"></image>  
                <view class="movie-desc">  
                    <view class="movie-title">{{ guessULike.name }}</view>  
                    <trailerStars :score="guessULike.score" :showNumber="0" ></trailerStars>  
                    <view class="movie-info">{{ guessULike.basicInfo }}</view>  
                    <view class="movie-info">{{ guessULike.releaseDate }}</view>  
                </view>  
                <view class="movie-oper" @click="praiseMe" :data-index="index">  
                    <image src="../../static/icos/praise.png" class="praise-ico"></image>  
                    <view class="praise-me">点赞</view>  
                    <view :animation="animationArray[index]" class="praise-me animation-opacity">+1</view>  
                </view>  
            </view>  
        </view>  
数据初始化  
data() {  
            return {  
                carouselList: [],  
                hotSuperHeroList: [],  
                hotTrailerList: [],  
                guessULikeList: [],  
                animation_temp: {},  
                animationArray: [  
                    {},{},{},{},{}  
                ]  
            }  
        }  
onLoad() {  
            // #ifdef APP-PLUS || MP-WEIXIN  
            //页面加载完成的时候,创建一个临时的对象  
            this.animation = uni.createAnimation();  
            // #endif  
}  
点击调用方法  
praiseMe(e){  
                var index = e.currentTarget.dataset.index;  
                //构建动画数据,并通过step来表示这组动画的完成  
                this.animation.translateY(-60).opacity(1).step({ duration:400 });  
                this.animation_temp = this.animation;//我不加上这段动画就实现不了,这个是什么情况  
                this.animationArray[index] = this.animation.export();  
                //初始化动画,动画立即完成  
                setTimeout(function() {  
                    this.animation.translateY(0).opacity(0).step(0);  
                    this.animationArray[index]= this.animation.export();  
                }.bind(this), 500);  
            }

this.animation_temp = this.animation;//我不加上这段动画就实现不了,这个是什么情况**

2019-08-02 14:12 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

说了半天没有一个人说到点子上,你把数组保存的变量animationArray改为对象保存,animationArray:{0:{},1:{}}这种形式就可以了,对象也可以通过下标来调用,所以绑定依旧没问题,

其原因估计是数组里面的对象可能无法被vue深入检测到变化,所以无效,虽然你的值发生了变化,但是就是不能同步到,所以用{}对象就可以了。

这个一看就是官方next学院的例子,我也是搞了半天,查了半天也没看见有人说句话,唉.....

wweili

wweili - csdds.cn

this.animation 哪里来的? 声明了吗

  • 1***@qq.com (作者)

    this.animation = uni.createAnimation(); 在onload中声明了

    2019-08-02 14:48

  • wweili

    回复 1***@qq.com: this.animation = 都this点了 这个你去哪里获取animation?。。

    2019-08-02 14:56

  • 1***@qq.com (作者)

    回复 wweili: 我换成你的在data中声明了,就可以把this.animation_temp = this.animation去掉了,但是我还是不明白我上面this.animation_temp = this.animation去掉就是不行

    2019-08-02 14:59

  • wweili

    回复 1***@qq.com: carouselList: [],

    hotSuperHeroList: [],

    hotTrailerList: [],

    guessULikeList: [],

    animation_temp: {},

    animationArray: [

    {},{},{},{},{}

    ]

    你上面都已经写了这么多了,作用是一样的

    Vue实例会代理data对象的属性 不创建实例怎么可以 this. 来访问呢

    2019-08-02 15:09

  • 1***@qq.com (作者)

    回复 wweili: 你看看我这样理解我刚开始的代码对不对,在onload中通过this.animation = uni.createAnimation();这个创建的只是临时的对象,而代码执行到 this.animationArray[index] = this.animation.export(); 这里的时候不是立马实现动画的,而是后面再渲染的,当后面渲染的时候找不到这个临时对象了,所以必须要把这个对象事先复制给该页面的某个对象

    2019-08-02 15:15

wweili

wweili - csdds.cn

在data(){} 里面把 animation 声明了

  • 1***@qq.com (作者)

    为什么在onload中声明不行

    2019-08-02 14:48

  • 2***@qq.com

    回复 1***@qq.com: 申明不是 实例化 要在 data(){ return } 里申明,当然不申明也能用。。。 用这个方式他就能出来动画了 var animationData = this.animation.export();

    // this.animationData = animationData;

    this.animationDataArray[index] = animationData;

    2019-08-30 16:20

该问题目前已经被锁定, 无法添加新回复