微信小程序实现自上而下字幕滚动

2018-09-24 21:41

阅读:571

  本文实例为大家分享了微信小程序实现字幕滚动的具体代码,供大家参考,具体内容如下

  

  需求:

  实现框内的文字自下而上的自动循环滚动。

  解决方案:

  第一种方法:

  经查询,最一开始实现字幕滚动是使用的微信小程序的swiper组件,后来发现,使用swiper组件实现的效果类似于轮播图,不符合需求。

  第二种方法:

  使用微信小程序的动画来来实现字幕滚动。

  思路:

  1.当list底部到container框的顶部时,即,内容全部走出了框外。结束字幕滚动,重新开始下一轮的滚动。
2.计算container框的高度,list的高度。一个框中的内容显示时长为 1500(暂定),通过list的高度除以container框的高度来判断显示时长(求整数并加1(+1是为了显示最后一个空白框))。

  实现:

  wxml

   <view class=container> <view class=list animation={{animationData}}> <view> <text class=txt-light>09:08</text> 很多人的一生,基本都是自己跟别人较劲,比如别人对自己的期待,比如把别人看得太重把自己看得太轻。其实一个人最应该考虑的问题是,自己如何与自己相处,比如人去楼空的时候如何照顾好自己的孤独,比如夜深人静的时候如何跟心灵沟通。自己跟自己能和谐共处,自己跟别人就能相安无事。 </view> <view> <text class=txt-light>19:08</text> 平和是待人处事的一种态度,也是做人酌一种美德。平和既是一种修养,又是一种工作方法。平和的人,从不被忙碌所萦绕,闲时吃紧,忙里悠闲。待人不严,教人勿高。宽严得宜,分寸得体。身心自在,能享受生活之乐趣。平和的人生,是和谐的人生,健康的人生。 </view> </view> </view>

  wxss

   .container { background-color: #ccc; height:150rpx; margin: 20rpx 20rpx 20rpx 20rpx; overflow:auto; } .txt-light { color:#acadbe; }

  js

   Page({ /** * 页面的初始数据 */ 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.框设置为禁止滑动,即

   .container { overflow: hidden; }

  防止手动滑动动画,从而影响setinterval的执行。

  2.设置setinterval的执行时间>动画执行时间,防止setinterval执行卡顿。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


评论


亲,登录后才可以留言!