中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序中怎么實現一個旋轉動畫效果音樂組件

發布時間:2021-06-16 15:45:42 來源:億速云 閱讀:255 作者:Leah 欄目:web開發

本篇文章為大家展示了微信小程序中怎么實現一個旋轉動畫效果音樂組件,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

music

音樂播放組件。

屬性

屬性名類型默認值說明
musicString 傳入的音樂資源地址
musicStyleString(隨便寫了個)音樂組件的樣式
rotateBooleantrue播放時是否有旋轉效果
iconOnString(隨便寫了個)音樂播放時的icon地址
iconOffString(隨便寫了個)音樂暫停時的icon地址

代碼

properties: {
  // 音樂路徑
  music: {
   type: String,
   value: '',
   observer: function (newVal) {
    this._initMusic(newVal)
   }
  },
  // 樣式
  musicStyle: {
   type: String,
   value: 'position: absolute; right: 20rpx; top: 20rpx; width: 100rpx; height: 100rpx;'
  },
  // 播放時是否有旋轉效果
  rotate: {
   type: Boolean,
   value: true
  },
  // 播放時的icon路徑
  iconOn: {
   type: String,
   value: '/resources/img/music-on.png' // 請填寫默認的圖片地址
  },
  // 暫停時的icon路徑
  iconOff: {
   type: String,
   value: '/resources/img/music-off.png' // 請填寫默認的圖片地址
  }
 }

初始化音樂

首先,在properties中接收頁面傳來的音樂文件地址,

music: {
 type: String,
 value: '',
 observer: function (newVal) {
  this._initMusic(newVal)
 }
}

這里的處理是,一旦接收到頁面傳來的 music 地址,就初始化音樂:

_initMusic: function (newVal) {
 // 當頁面傳來新的music時,先銷毀之前的audioCtx,否則頁面會很嗨
 if (this.data.audioCtx) {
  this.data.audioCtx.destroy()
 }
 if (newVal) {
  var audioCtx = wx.createInnerAudioContext()
  this.setData({
    audioCtx: audioCtx
  })
  if (this.data.audioStatus == '1') {
    audioCtx.autoplay = true
  }
  audioCtx.loop = true
  audioCtx.src = newVal
 }
}

 audioStatus 用來記錄音樂播放狀態,在data中默認設置為1:

data: {
  icon: '',
  audioStatus: 1,
  audioCtx: '',
  musicClass: 'music-on'
}

wxml文件里,只用一個 <image> 標簽:

<image class='music {{ rotate && musicClass }}' 
     
    src="{{ icon }}" 
    bindtap='_switch' 
    wx:if="{{ music }}"></image>

其中, icon 在組件ready()時賦值成播放狀態的icon:

ready() {
  this.setData({
   icon: this.data.iconOn
  })
}

音樂旋轉效果

音樂播放時的旋轉效果,是用css動畫實現的,wxss文件如下:

.music {
 position: absolute;
 z-index: 99;
 -webkit-animation-iteration-count: infinite;
}
/* 旋轉class */
.music-on {
 animation: music-rotate 4s linear infinite;
}
/* 旋轉動畫 */
@keyframes music-rotate {
 0% {
  transform: rotateZ(0deg);
 }
 
 100% {
  transform: rotateZ(360deg);
 }
}

當 rotate 為true時,使 musicClass 的值為 music-on,就能實現旋轉了。

當然, musicClass 需要用 this.setData 的方式來切換值。

爆丑照:

微信小程序中怎么實現一個旋轉動畫效果音樂組件

音樂控制

手動切換

手動點擊時,用取反的邏輯控制音樂的播放和暫停:

_switch: function () {
 // 如果是播放就停止 
 if (this.data.audioStatus) {
  this.setData({
   audioStatus: 0,
   icon: this.data.iconOff,
   musicClass: ''
  })
  this.data.audioCtx.pause()
 // 如果是停止就播放
 } else {
  this.setData({
   audioStatus: 1,
   icon: this.data.iconOn,
   musicClass: 'music-on'
  })
  this.data.audioCtx.play()
 }
}

其它情況

同時,還要對下列情況做處理:

  • 分享時,進入選好友界面、音樂停止,分享回來后,音樂沒有繼續播放

  • 從此頁面跳轉到下一個頁面時,音樂還在繼續

  • 從此頁面撤回到上一個頁面時,音樂還在繼續

解決的方法,是在組件的methods中又寫了兩個方法:

// 寫在組件的methods中:
 
// 在引用組件頁面的onShow()中調用
// 否則,如果當發生分享頁面行為并返回時,音樂不會自動播放
onShow: function () {
 if (this.data.music && this.data.audioStatus) {
  this.data.audioCtx.play()
 }
},
// 在引用組件頁面的onHide()中調用
// 否則,在跳轉到下一個頁面后,音樂還在繼續
onHide: function () {
 if (this.data.music && this.data.audioStatus) {
  this.data.audioCtx.pause()
 }
 this.setData({
  animationData: {}
 })
}

這兩個方法分別在頁面中的 onShow 和 onHide 中調用,調用方式就是父組件獲取到子組件實例對象:

例如,給<music>組件加id為"music-componet",調用時就是:

// 寫在調用頁面中
 
onShow: function () {
  this.selectComponent('#music-component').onShow()
},
onHide: function () {
  this.selectComponent('#music-component').onHide()
}

最后,在組件的detached中也調用一下 onHide 方法:

// 頁面關閉時銷毀音樂
detached() {
  this.onHide()
}

上述內容就是微信小程序中怎么實現一個旋轉動畫效果音樂組件,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊通| 永济市| 乌拉特前旗| 惠州市| 永顺县| 大余县| 诸城市| 朝阳县| 黄龙县| 天门市| 海门市| 金塔县| 寿光市| 蓬安县| 闵行区| 黄平县| 颍上县| 泸溪县| 蒙自县| 左云县| 高安市| 沅陵县| 恩施市| 安陆市| 修武县| 明光市| 古田县| 大冶市| 宝山区| 酉阳| 黄陵县| 凤凰县| 临颍县| 东台市| 额敏县| 犍为县| 平果县| 铁岭市| 同仁县| 江西省| 广南县|