本文實例為大家分享了微信小程序實現字幕滾動的具體代碼,供大家參考,具體內容如下
需求:
實現框內的文字自下而上的自動循環滾動。
解決方案:
第一種方法:
經查詢,最一開始實現字幕滾動是使用的微信小程序的swiper組件,后來發現,使用swiper組件實現的效果類似于輪播圖,不符合需求。
<swiper class="swiper_container" vertical="true" autoplay="true" circular="true" interval="2000"> <view class='list'> <view wx:for="{{List}}" wx:key="index"> <swiper-item> <text class='txt-light'>{{item.checkTime}}</text> {{item.content}} </swiper-item> </view> </view></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執行卡頓。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答