首頁 > 軟體

微信小程式全螢幕捲動字幕的實現方法詳解

2022-08-23 18:00:03

實現效果

一、實現背景

無意中在某音上看到用手機橫屏作為廣告屏的視訊,大部分都是用第三方軟體實現的;

以及在汽車後擋風玻璃放置提醒字樣的視訊,這種基本是要花錢買螢幕,通過手機控制螢幕內容;

遂想實現這種效果

二、實現程式碼

1,捲動字幕

zimu.wxml,介面佈局,很簡單,沒啥特別的,頂部一個返回按鈕,為了不影響整體效果,可以把這個按鈕做成透明的圖片放上去;除了那個按鈕剩下的就是捲動的字幕元件了

<!--pages/zimu/zimu.wxml-->
<view class="parent">
  <view class="topview">
    <image class="topback" src="/image/clock_back.png" mode="widthFix" bindtap="onBack"/>
  </view>
  <view class="marqueeView1">
    <text class="marqueeText1" style="--during--:{{during}}s;" decode>&nbsp;&nbsp;{{mark}}</text>
  </view>
</view>

zimu.wxss

/* pages/zimu/zimu.wxss */
/* xm.wxss是一個字型樣式檔案,可不要 */
/*@import '../../style/xm.wxss';*/
page {
  background: black;
  width: 100%;
  height: 100%;
}
.parent {
  height: 100%;
  width: 100%;
  position: relative;
  z-index: 1;
}
.marqueeView1 {
  position: absolute;
  z-index: 2;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  margin: 10rpx auto;
  overflow: hidden;
  /* background: #fff; */
  border-radius: 5px;
  padding: 5px;
  box-sizing: border-box;
}
.marqueeText1 {
  color: white;
  font-size: 250rpx;
  font-family: "DS-Digital";
  /* font-family: "Courier New", Courier, monospace; */
  white-space: nowrap;
  /* infinite無限迴圈 10s*/
  animation: 10s loop linear infinite normal;
  display: inline-block;
  vertical-align: top;
}
@keyframes loop {
  0% {
    transform: translateX(350px);
    -webkit-transform: translateX(350px);
  }
  100% {
    transform: translateX(-100%);
    -webkit-transform: translateX(-100%);
  } 
}
@-webkit-keyframes loop {
  0% {
    transform: translateX(1000px);
    -webkit-transform: translateX(1000px);
  }
  100% {
    transform: translateX(-75%);
    -webkit-transform: translateX(-75%);
  }
}
.topview {
  position: absolute;
  z-index: 4;
  margin-top: 10rpx;
}
.topback {
  margin-left: 20rpx;
  padding: 10px;
  width: 30px;
  height: 30px;
  /* background: red; */
}

zimu.json,設定這個頁面橫屏展示,landscape,背景色為黑色

{
  "usingComponents": {},
  "pageOrientation": "landscape",
  "navigationBarBackgroundColor": "#000000",
  "navigationStyle": "custom",
  "navigationBarTextStyle": "white"
}

zimu.js,主要是onload函數,接收了上一個介面的傳參,把內容和捲動速度引數傳過來,當然也可以加其他引數,比如說字型顏色等

data: {
    mark:'測試卷動字幕',
    marqueeWidth:0
  },
  onBack: function(){ 
    wx.navigateBack({
      delta:1
    })
  },
  /**
   * 生命週期函數--監聽頁面載入
   */
  onLoad(options) {
    this.setData({
      mark: options.mark,
    })
  },

三、捲動速度

(1)新增一個時間變數,在wxss中參照,這個during來自於wxml中定義

animation: var(--during--) loop linear infinite normal;

<text class="marqueeText1" style="--during--:{{during}}s;" decode>&nbsp;&nbsp;{{mark}}</text>

(2)控制捲動速度的是一個radioGroup元件,內含三個radio無線電鈕,通過繫結bindChange事件獲取無線電鈕的值傳到下一個介面使用

(3)根據文字的長度和選擇的捲動速度計算出動畫所需要的事件,這裡預設正常速度一個字一秒。

data: {
    mark:'測試卷動字幕',
    speed: 2,
    during:10,
    marqueeWidth:0
  },
  /**
   * 生命週期函數--監聽頁面載入
   */
  onLoad(options) {
    console.log(options.mark+options.speed)
    var consumeTime = 10
    if(options.speed == 1){
      consumeTime = options.mark.length * 2
    }else if(options.speed == 2){
      consumeTime = options.mark.length
    }else if(options.speed == 3){
      consumeTime = options.mark.length / 2
    }
    this.setData({
      mark: ' '+options.mark,
      during: consumeTime
    })
  },

(4)給輸入框新增清空按鈕,新增一個icon跟在文字的後面

  <view  class='clear-clear'>
      <icon type="clear" size="30" catchtap='clearInput'/>
  </view>
  clearInput: function (e) {
    this.setData({
      mark:''
     })
  },

四、後續優化

1,可以新增動態表情圖片

2,可以新增修改文字顏色

3,可以新增語音播報

到此這篇關於微信小程式全螢幕捲動字幕的實現方法詳解的文章就介紹到這了,更多相關小程式全螢幕捲動字幕內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com