微信小程序异步串行、setData结合wx:if页面更新图片闪烁抖动问题

122 阅读1分钟

ANIME-PICTURES.NET.jpg

最近在写小程序,有点折磨

1、关于图片抖动闪烁问题

检查一下,是不是图片没有加高度,我加了高度之后就不闪烁了

2、关于异步串行

这个功能呢,是要实现一个假的进度条效果,模拟文件一个个上传完成的过程,其中就要实现异步操作顺序执行的效果,这也就是异步串行。

为了简单起见,直接使用promise来实现,es5 的我也不太会...

话不多说,直接上代码:

// 显示进度动画效果
let loadIngData = uploadData[0]
let fulFilData = uploadData[1]

let promise = Promise.resolve();

loadIngData.data.forEach((item) => {
    promise = promise.then(() => {
      return that.animateItem(item, loadIngData, fulFilData)
    })
})

promise.then(() => {
    console.log('全部完成');
});

/**
* 串行动画
*/
animateItem(item, loadIngData, fulFilData) {
    let that = this;
    return new Promise(resolve => {
        setTimeout(() => {
          item.percent = 100;
          fulFilData.data.push(item);
          that.setData({
            ['uploadData[0].data']: loadIngData.data,
            ['uploadData[1].data']: fulFilData.data,
          });
          resolve();
        }, 500); 
    });
}

其中,关键就是这个 animateItem 函数,它返回一个promise对象,并且通过定时完成这个promise,item.percent 是我的进度数据,setData 用于刷新小程序页面

也可以封装的更通用一些,比如可以控制执行时间、自定义更多的操作,各位大佬应该可以实现,我就不献丑了