onst offset = wx.worklet.shared(0)
that.applyAnimatedStyle('#clLeft', () => {
'worklet';
return {
transform: `translateX(-${offset.value}px)`
}
})
that.applyAnimatedStyle('#clRight', () => {
'worklet';
return {
transform: `translateX(${offset.value}px)`
}
})
that._offset = offset
项目需要做到一个效果,就是窗帘根据按钮实现开关停的操作(两个帘向两侧平移,或者同时靠拢),一开始使用animation,发现小程序没有onStop(),做不到中间暂停的效果,
于是选择动态修改translateX的参数,通过计时器每1S移动10px,点击暂停清除计数器。这种方法可以实现暂停,但是有一个问题,每次运动10px后setdata动态修改translateX的参数,两张图片就会重新渲染(看起来就是闪一下),这个方法处理不掉,原因就是:小程序采用双线程架构,渲染线程(UI 线程)和逻辑线程(JS 线程)分离
后面查询社区的时候AI提示小程序有worklet动画,可以同步js线程和UI线程的参数,于是运用上面代码同步了translateX 移动的参数,这样就不会存在js改变参数的时候ui会闪烁的问题了