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 !== &#39;&#39;" @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: &#39;&#39;
  },
},复制代码
Nach dem Login kopieren
  • 定义CustomAudio组件的初始化相关的操作,并给innerAudioContext的回调添加一些行为(之前Taro那篇我们踩过的坑这里就直接上代码了)
import { formatSecondToHHmmss, afterAudioPlay, beforeAudioRecordOrPlay } from &#39;../../lib/Utils&#39;const iconPaused = &#39;../../static/images/icon_paused.png&#39;const iconPlaying = &#39;../../static/images/icon_playing.png&#39;const iconStop = &#39;../../static/images/icon_stop.png&#39;const iconLoading = &#39;../../static/images/icon_loading.gif&#39;// ...data() {  return {    audioCtx: null, // 音频上下文
    duration: 0, // 音频总时长
    currentTime: 0, // 音频当前播放的时长
    audioImg: iconLoading, // 默认状态为加载中
  }
},watch: {  audioSrc: {
    handler(newSrc, oldSrc) {      console.log(&#39;watch&#39;, 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: &#39;无效音源,请先录音&#39;,      icon: &#39;none&#39;
    })
  },
  playOrStopAudio() {    if (this.audioCtx === null) {      this.audioCtx = uni.createInnerAudioContext()      this.audioCtx.src = this.audioSrc      this.bindAuidoCallback(this.audioCtx)
    }    if (this.audioCtx.paused) {      if (beforeAudioRecordOrPlay(&#39;play&#39;)) {        this.audioCtx.play()        this.audioImg = iconPlaying
      }
    } else {      this.audioCtx.pause()
      afterAudioPlay()      this.audioImg = iconPaused
    }
  },
  onTimeUpdate(e) {    console.log(&#39;onTimeUpdate&#39;, 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(&#39;onCanplay&#39;, e)
  },
  onWaiting(e) {    if (this.audioImg !== iconLoading) {      this.audioImg = iconLoading
    }
  },
  onPlay(e) {    console.log(&#39;onPlay&#39;, 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(&#39;onPause&#39;, e)    this.audioImg = iconPaused
  },
  onEnded(e) {    console.log(&#39;onEnded&#39;, e)    if (this.audioImg !== iconPaused) {      this.audioImg = iconPaused
    }
    afterAudioPlay()
  },
  onError(e) {
    uni.showToast({      title: &#39;音频加载失败&#39;,      icon: &#39;none&#39;
    })    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 KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Beste grafische Einstellungen
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Wie man alles in Myrise freischaltet
    1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    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? Der folgende Artikel stellt Ihnen ein Tutorial zur Entwicklung einer Uni-App in VSCode vor. Dies ist möglicherweise das beste und detaillierteste Tutorial. Kommen Sie und schauen Sie vorbei!

    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

    Wie entwickle ich mit Uniapp eine einfache Kartennavigation? Dieser Artikel wird Ihnen eine Idee zum Erstellen einer einfachen Karte liefern. Ich hoffe, er wird Ihnen hilfreich sein!

    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

    Wie entwickle ich mit Uniapp ein Schlangenspiel? Der folgende Artikel führt Sie Schritt für Schritt durch die Implementierung des Snake-Spiels in Uniapp. Ich hoffe, er wird Ihnen hilfreich sein!

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

    Uni-App-Schnittstelle, globale Methodenkapselung 1. Erstellen Sie eine API-Datei im Stammverzeichnis, erstellen Sie die Dateien api.js, baseUrl.js und http.js im API-Ordner 2.baseUrl.js-Dateicode exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js-Dateicode-Exportfunktionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

    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

    Dieser Artikel vermittelt Ihnen relevantes Wissen über Uniapp, das hauptsächlich die damit verbundenen Probleme der Implementierung der Funktion „Alle auswählen“ des Mehrfachauswahlfelds organisiert. Der Grund, warum die Funktion „Alle auswählen“ nicht implementiert werden kann, liegt darin, dass das aktivierte Feld des Kontrollkästchens aktiviert ist Dynamisch geändert, der Status auf der Schnittstelle kann sich in Echtzeit ändern, aber das Änderungsereignis der Checkbox-Gruppe kann nicht ausgelöst werden. Ich hoffe, es wird für alle hilfreich sein.

    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

    Dieser Artikel führt Sie Schritt für Schritt durch die Entwicklung eines Uni-App-Kalender-Plug-Ins und stellt vor, wie das nächste Kalender-Plug-In von der Entwicklung bis zur Veröffentlichung entwickelt wird.

    Lassen Sie uns über das Dropdown-Laden der Scroll-Ansicht in Uniapp sprechen Lassen Sie uns über das Dropdown-Laden der Scroll-Ansicht in Uniapp sprechen Jul 14, 2022 pm 09:07 PM

    Wie implementiert Uniapp das Laden von Scroll-View-Dropdowns? Im folgenden Artikel geht es um das Dropdown-Laden der Scroll-Ansicht des Uniapp-WeChat-Applets. Ich hoffe, dass es für alle hilfreich ist!

    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

    Dieser Artikel vermittelt Ihnen relevantes Wissen über Uniapp. Er stellt vor allem vor, wie Sie Uniapp zum Tätigen von Anrufen und zum Synchronisieren von Aufzeichnungen verwenden. Ich hoffe, dass es für alle hilfreich ist.

    See all articles