之前第一次在小程序里写公告的时候,用的是动态修改left值,卡的一逼。再之后是用css动画,移动距离不好把握,用变量控制移动实在是有点蠢
前几天又遇到了公告的需求,于是试着使用了小程序内部的Animation
对象,感觉还比较流畅。
为了便于复用及维护,以插件的形式编写,给外部一个展示公告的方法
1 | self.selectComponent(`#theggitem`).setGGtxt( |
插件内部专心处理公告的展示,先在ready事件里面初始化各种对象1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Component({
...
...
lifetimes: {
ready(){
let
self = this,
theWidth = app.globalData.sysInfo.windowWidth || 375,
theScale = parseFloat((theWidth / 750).toFixed(2)),
maskWidth = theScale * 261;
self.setData({
theScale: theScale,
maskWidth: maskWidth
});
self.animateObj = qq.createAnimation({
duration: animateTime
});
}
}
...
...
});
其中展示区域的宽度是固定的,还要根据实际分辨率还进行缩放。有了展示宽度之后,公告文字默认位置就用left等于展示宽度,然后再让文字移动到left等于负的文字宽度的位置,就是刚好走完全程了。
其中,文字的样式要是绝对定位,同时要有white-space: nowrap;
这个属性。这样使用小程序提供的方法读取出来的宽度才是准确的。
1 | Component({ |