欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-04 12:53:38
本文实例为大家分享了微信小程序实现字幕滚动的具体代码,供大家参考,具体内容如下 需求: 实现框内的文字自下而上的自动循环滚动。 解决方案: 第一种方法:...

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

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

需求:

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

解决方案:

第一种方法:

经查询,最一开始实现字幕滚动是使用的微信小程序的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执行卡顿。

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