Inhaltsverzeichnis
Der Grund
音频组件的要求与限制
材料/属性/方法
uni-app Vue
Anforderungen und Einschränkungen der Audiokomponenten" >同样的scss

Anforderungen und Einschränkungen der Audiokomponenten

1. Zum Abspielen oder Anhalten klicken
2. Zeigt den aktuellen Audiostatus an (Pause). ) durch Symboländerungen /Wiedergabe/Laden)
4. Aktualisieren Sie den Komponentenstatus, wenn das Seitenaudio aktualisiert wird.
5. Es gibt und gibt nur ein Audio im Wiedergabestatus.
6 Stoppen Sie die Wiedergabe und zerstören Sie das Audio, nachdem Sie die Seite verlassen haben. Beispiel
Die gleiche scss-Dateirrreee
Heim Web-Frontend uni-app Detaillierte Erläuterung der Uni-App (vue), die eine grundlegende Audiokomponente basierend auf InnerAudioContext kapselt

Detaillierte Erläuterung der Uni-App (vue), die eine grundlegende Audiokomponente basierend auf InnerAudioContext kapselt

Sep 19, 2020 pm 04:32 PM
uni-app Audiokomponenten

Detaillierte Erläuterung der Uni-App (vue), die eine grundlegende Audiokomponente basierend auf InnerAudioContext kapselt

Verwandte Lernempfehlungen: Entwicklung des WeChat-Miniprogramms

Der Grund

Derselbe liegt darin, dass der Beamte des Miniprogramms die audio-Komponente nicht verwaltetaudio组件了

音频组件的要求与限制

1、点击播放或者暂停
2、显示播放进度及总时长
3、通过图标变化显示当前音频所处状态(暂停/播放/加载中)
4、页面音频更新时刷新组件状态
5、全局有且只有一个音频处于播放状态
6、离开页面之后要自动停止播放并销毁音频实例

材料/属性/方法

让我们开始吧

uni-app Vue

  • 同样的先构造DOM结构
<view class="custom-audio">
  <image v-if="audioSrc !== undefined && audioSrc !== null && audioSrc !== ''" @click="playOrStopAudio" :src="audioImg" class="audio-btn" />
  <text v-else @click="tips" class="audio-btn">无音源</text>
  <text>{{ fmtSecond(currentTime) }}/{{ fmtSecond(duration) }}</text></view>复制代码
Nach dem Login kopieren
  • 定义接受的组件
props: {  audioSrc: {    type: String,    default: ''
  },
},复制代码
Nach dem Login kopieren
  • 定义CustomAudio组件的初始化相关的操作,并给innerAudioContext的回调添加一些行为(之前Taro那篇我们踩过的坑这里就直接上代码了)
import { formatSecondToHHmmss, afterAudioPlay, beforeAudioRecordOrPlay } from '../../lib/Utils'const iconPaused = '../../static/images/icon_paused.png'const iconPlaying = '../../static/images/icon_playing.png'const iconStop = '../../static/images/icon_stop.png'const iconLoading = '../../static/images/icon_loading.gif'// ...data() {  return {    audioCtx: null, // 音频上下文
    duration: 0, // 音频总时长
    currentTime: 0, // 音频当前播放的时长
    audioImg: iconLoading, // 默认状态为加载中
  }
},watch: {  audioSrc: {
    handler(newSrc, oldSrc) {      console.log('watch', newSrc, oldSrc)      this.audioImg = iconLoading      this.currentTime = 0
      this.duration = 0
      if (this.audioCtx === undefined) {        this.audioCtx = uni.createInnerAudioContext()        this.onTimeUpdate = this.audioCtx.onTimeUpdate        this.bindAuidoCallback(this.audioCtx)
      } else {        this.audioCtx.src = newSrc
      }      if (this.audioCtx.play) {        this.audioCtx.stop()
        getApp().globalData.audioPlaying = false
      }
    }
  }
},
mounted() {  this.audioCtx = uni.createInnerAudioContext()  this.audioCtx.src = this.audioSrc  this.audioCtx.startTime = 0
  this.bindAuidoCallback(this.audioCtx)
},methods: {
  bindAuidoCallback(ctx) {
    ctx.onTimeUpdate((e) => {      this.onTimeUpdate(e)
    })
    ctx.onCanplay((e) => {      this.onCanplay(e)
    })
    ctx.onWaiting((e) => {      this.onWaiting(e)
    })
    ctx.onPlay((e) => {      this.onPlay(e)
    })
    ctx.onPause((e) => {      this.onPause(e)
    })
    ctx.onEnded((e) => {      this.onEnded(e)
    })
    ctx.onError((e) => {      this.onError(e)
    })
  },
  tips(){
    uni.showToast({      title: '无效音源,请先录音',      icon: 'none'
    })
  },
  playOrStopAudio() {    if (this.audioCtx === null) {      this.audioCtx = uni.createInnerAudioContext()      this.audioCtx.src = this.audioSrc      this.bindAuidoCallback(this.audioCtx)
    }    if (this.audioCtx.paused) {      if (beforeAudioRecordOrPlay('play')) {        this.audioCtx.play()        this.audioImg = iconPlaying
      }
    } else {      this.audioCtx.pause()
      afterAudioPlay()      this.audioImg = iconPaused
    }
  },
  onTimeUpdate(e) {    console.log('onTimeUpdate', this.audioCtx.duration, this.audioCtx.currentTime)    if (this.audioCtx.currentTime > 0 && this.audioCtx.currentTime <= 1) {      this.currentTime = 1
    } else if (this.currentTime !== Math.floor(this.audioCtx.currentTime)) {      this.currentTime = Math.floor(this.audioCtx.currentTime)
    }    const duration = Math.floor(this.audioCtx.duration)    if (this.duration !== duration) {      this.duration = duration
    }
  },
  onCanplay(e) {    if (this.audioImg === iconLoading) {      this.audioImg = iconPaused
    }    console.log('onCanplay', e)
  },
  onWaiting(e) {    if (this.audioImg !== iconLoading) {      this.audioImg = iconLoading
    }
  },
  onPlay(e) {    console.log('onPlay', e, this.audioCtx.duration)    this.audioImg = iconPlaying    if (this.audioCtx.duration > 0 && this.audioCtx.duration <= 1) {      this.duration = 1
    } else {      this.duration = Math.floor(this.audioCtx.duration)
    }
  },
  onPause(e) {    console.log('onPause', e)    this.audioImg = iconPaused
  },
  onEnded(e) {    console.log('onEnded', e)    if (this.audioImg !== iconPaused) {      this.audioImg = iconPaused
    }
    afterAudioPlay()
  },
  onError(e) {
    uni.showToast({      title: '音频加载失败',      icon: 'none'
    })    throw new Error(e.errMsg, e.errCode)
  },
  fmtSecond(sec) {    const { min, second } = formatSecondToHHmmss(sec)    return `${min}:${second}`
  }
},复制代码
Nach dem Login kopieren

同样的scss

Anforderungen und Einschränkungen der Audiokomponenten

1. Zum Abspielen oder Anhalten klicken
2. Zeigt den aktuellen Audiostatus an (Pause). ) durch Symboländerungen /Wiedergabe/Laden)
4. Aktualisieren Sie den Komponentenstatus, wenn das Seitenaudio aktualisiert wird.
5. Es gibt und gibt nur ein Audio im Wiedergabestatus.
6 Stoppen Sie die Wiedergabe und zerstören Sie das Audio, nachdem Sie die Seite verlassen haben. Beispiel

Material/Eigenschaft/Methode
Detaillierte Erläuterung der Uni-App (vue), die eine grundlegende Audiokomponente basierend auf InnerAudioContext kapseltLass uns beginnen

uni-app Vue

  • Das Gleiche: Erstellen Sie zunächst die DOM-Struktur
<style lang="scss" scoped>.custom-audio {  border-radius: 8vw;  border: #CCC 1px solid;  background: #F3F6FC;  color: #333;  display: flex;  flex-flow: row nowrap;  align-items: center;  justify-content: space-between;  padding: 2vw;  font-size: 14px;
  .audio-btn {    width: 10vw;    height: 10vw;    white-space: nowrap;    display: flex;    align-items: center;    justify-content: center;
  }
}
</style>复制代码
Nach dem Login kopieren
  • Definieren Sie die akzeptierten Komponenten
rrreee
  • Definieren Sie -Vorgänge im Zusammenhang mit der Initialisierung der CustomAudio-Komponente und fügen Sie einige Verhaltensweisen zum Rückruf von innerAudioContext hinzu (die Fallstricke, auf die wir im vorherigen Taro-Artikel gestoßen sind). werden hier direkt codiert)
  • ul>rrreee

    Die gleiche scss-Dateirrreee

    Endlich

    Wenn Sie auf Probleme stoßen oder Vorschläge haben, können Sie uns folgen. Lassen Sie mich darüber diskutieren

    Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Uni-App (vue), die eine grundlegende Audiokomponente basierend auf InnerAudioContext kapselt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße Artikel -Tags

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Wie entwickle ich eine Uni-App in VSCode? (Tutorial-Teilen) Wie entwickle ich eine Uni-App in VSCode? (Tutorial-Teilen) May 13, 2022 pm 08:11 PM

    Wie entwickle ich eine Uni-App in VSCode? (Tutorial-Teilen)

    Verwenden Sie uniapp, um eine einfache Kartennavigation zu entwickeln Verwenden Sie uniapp, um eine einfache Kartennavigation zu entwickeln Jun 09, 2022 pm 07:46 PM

    Verwenden Sie uniapp, um eine einfache Kartennavigation zu entwickeln

    Lassen Sie uns darüber sprechen, wie Sie mit Uniapp ein Schlangenspiel entwickeln können! Lassen Sie uns darüber sprechen, wie Sie mit Uniapp ein Schlangenspiel entwickeln können! May 20, 2022 pm 07:56 PM

    Lassen Sie uns darüber sprechen, wie Sie mit Uniapp ein Schlangenspiel entwickeln können!

    So kapseln Sie eine Uni-App-Vue3-Schnittstellenanfrage So kapseln Sie eine Uni-App-Vue3-Schnittstellenanfrage May 11, 2023 pm 07:28 PM

    So kapseln Sie eine Uni-App-Vue3-Schnittstellenanfrage

    Beispiele zur Erläuterung, wie Uniapp die All-Select-Funktion von Multi-Select-Boxen implementiert Beispiele zur Erläuterung, wie Uniapp die All-Select-Funktion von Multi-Select-Boxen implementiert Jun 22, 2022 am 11:57 AM

    Beispiele zur Erläuterung, wie Uniapp die All-Select-Funktion von Multi-Select-Boxen implementiert

    Führen Sie Sie Schritt für Schritt durch die Entwicklung eines Uni-App-Kalender-Plug-Ins (und dessen Veröffentlichung). Führen Sie Sie Schritt für Schritt durch die Entwicklung eines Uni-App-Kalender-Plug-Ins (und dessen Veröffentlichung). Jun 30, 2022 pm 08:13 PM

    Führen Sie Sie Schritt für Schritt durch die Entwicklung eines Uni-App-Kalender-Plug-Ins (und dessen Veröffentlichung).

    Detailliertes Beispiel, wie Uniapp die Telefonaufzeichnungsfunktion implementiert (mit Code) Detailliertes Beispiel, wie Uniapp die Telefonaufzeichnungsfunktion implementiert (mit Code) Jan 05, 2023 pm 04:41 PM

    Detailliertes Beispiel, wie Uniapp die Telefonaufzeichnungsfunktion implementiert (mit Code)

    Lassen Sie uns darüber sprechen, wie Sie mit Uniapp globale Nachrichtenaufforderungen und deren Komponenten implementieren Lassen Sie uns darüber sprechen, wie Sie mit Uniapp globale Nachrichtenaufforderungen und deren Komponenten implementieren Jun 22, 2022 pm 06:24 PM

    Lassen Sie uns darüber sprechen, wie Sie mit Uniapp globale Nachrichtenaufforderungen und deren Komponenten implementieren

    See all articles