本文实例为大家分享了微信小程序实现字幕滚动的具体代码,供大家参考,具体内容如下
需求:
解决方案:
第一种方法:
经查询,最一开始实现字幕滚动是使用的微信小程序的swiper组件,后来发现,使用swiper组件实现的效果类似于轮播图,不符合需求。
第二种方法:
使用微信小程序的动画来来实现字幕滚动。
思路:
1.当list底部到container框的顶部时,即,内容全部走出了框外。结束字幕滚动,重新开始下一轮的滚动。 2.计算container框的高度,list的高度。一个框中的内容显示时长为 1500(暂定),通过list的高度除以container框的高度来判断显示时长(求整数并加1(+1是为了显示最后一个空白框))。
实现:
wxml
wxss
js
- 页面的初始数据
*/
data: {
},/**
- 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},/**
- 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},/**
- 生命周期函数--监听页面显示
/
onShow: function () {
// this.util();
this.getHeight();
},util: function (obj) {
console.log(obj);
console.log(-obj.list);
var continueTime = (parseInt(obj.list / obj.container) + 1) 1500;
var setIntervalTime = 50 + continueTime;
var animation = wx.createAnimation({
duration: 200,//动画时长
timingFunction: "linear",//线性
delay: 0 //0则不延迟
});
this.animation = animation;
animation.translateY(obj.container).step({ duration: 50,timingFunction: 'step-start' }).translateY(-obj.list).step({ duration: continueTime });
this.setData({
animationData: animation.export()
})
setInterval(() => {
animation.translateY(obj.container).step({ duration: 50,timingFunction: 'step-start' }).translateY(-obj.list).step({ duration: continueTime });
this.setData({
animationData: animation.export()
})
},setIntervalTime)
// setInterval(() => {
// animation.translateY(50).step({ duration: 50,timingFunction: 'step-start' }).translateY(-250).step({ duration: 5000 });
// this.setData({
// animationData: animation.export()
// })
// },6000)
},getHeight() {
var obj = new Object();
//创建节点选择器
var query = wx.createSelectorQuery();
query.select('.container').boundingClientRect()
query.select('.list').boundingClientRect()
query.exec((res) => {
obj.container = res[0].height; // 框的height
obj.list = res[1].height; // list的height
// return obj;
this.util(obj);
})
}
})
20180712更新:
1.框设置为禁止滑动,即
防止手动滑动动画,从而影响setinterval的执行。
2.设置setinterval的执行时间>动画执行时间,防止setinterval执行卡顿。
原文链接:https://www.f2er.com/weapp/31513.html