uniapp音乐播放createInnerAudioContext

利用uniapp的api createInnerAudioContext音乐播放

1.html部分

javascript 复制代码
<template>
	<view style="padding: 30vh 20% 0 20%;" class="flex-space-center">
		<view @click="handleDo('stop')" v-if="status != 'stop'">
			结束
		</view>
		<view @click="handleDo('play')" v-if="status =='stop'">
			开始
		</view>
		<view @click="handleDo('pause')" v-if="status == 'play' || status =='resum'">
			暂停
		</view>
		<view @click="handleDo('resum')" v-if="status == 'pause'">
			继续
		</view>

		<view :class="{play:isPlay,pause:isPause}"
			style="display: inline-block;height: 40rpx;width: 40rpx;background: red;" @click="handleImg">
			5
		</view>
	</view>
</template>

2.script部分

javascript 复制代码
<script>
	const innerAudioContext = uni.createInnerAudioContext();
	export default {
		components: {},

		data() {
			return {
				isPause: false,
				isPlay: false,
				status: 'stop', //stop 结束  play播放  pause暂停  resum继续
				bgmusic: '',
				src_bgmusic: 'https://web-ext-storage.dcloud.net.cn/uni-app/ForElise.mp3'
			}
		},

		onLoad(options) {
			this.init(options)

		},
		onHide() {
			//注意:uni.navigateBack到下一个页面时,音乐会继续播放,所以我们要在这里设置一下暂停
			if (this.bgmusic) {
				this.voice_pause()
			}
		},
		onShow() {
			// 从下一个返回到这个页面时继续
			if (this.bgmusic) {
				this.audioResum()
			}
		},
		onUnload() {
			// 页面销毁时暂停音乐
			this.voice_stop()
		},
		onReady() {},
		methods: {
			init(options) {
				// 自然播放结束事件
				innerAudioContext.onEnded(() => {
					this.audioPaly()
				})
				// 模拟接口请求背景音乐---
				setTimeout(() => {
					this.bgmusic = this.src_bgmusic;
				}, 0)
			},
			// 播放
			audioPaly() {
				this.isPause = false
				this.isPlay = true
				innerAudioContext.src = this.bgmusic
				innerAudioContext.play()
				this.status = 'play'
			},
			// 继续
			audioResum() {
				this.isPause = false
				this.isPlay = true
				innerAudioContext.play()
				this.status = 'resum'
			},
			// 暂停
			audioPause() {
				this.isPause = true;
				this.isPlay = false;
				innerAudioContext.pause()
				this.status = 'pause'
			},
			// 结束
			audioStop() {
				this.isPause = true
				this.isPlay = false;
				innerAudioContext.stop()
				this.status = 'stop'
			},
			// 操作
			handleDo(status) {
				switch (status) {
					case 'stop':
						this.audioStop()
						break;
					case 'play':
						this.audioPaly()
						break;
					case 'pause':
						this.audioPause()
						break;
					case 'resum':
						this.audioResum()
						break;
				}
			},
			// 点击旋转
			handleImg() {
				switch (this.status) {
					case 'play':
						this.audioPause()
						break;
					case 'pause':
						this.audioResum()
						break;
					case 'resum':
						this.audioPause()
						break;
					case 'stop':
						this.audioPaly()
						break;
				}
			}

		}

	}
</script>

style部分

javascript 复制代码
<style lang="scss" scoped>
	.play {
		animation: rotate 3s linear infinite;
	}

	.pause {
		animation-play-state: paused;
	}

	@keyframes rotate {
		to {
			transform: rotate(360deg);
		}
	}
</style>
相关推荐
程序员小刘5 小时前
HarmonyOS 5中UniApp的调试步骤
华为·uni-app·harmonyos
米粒宝的爸爸9 小时前
uniapp中vue3 ,uview-plus使用!
前端·vue.js·uni-app
狂龙骄子16 小时前
uniapp Switch控件背景颜色自定义
css·uni-app·switch·hbuilderx·colorui
qq_4244091916 小时前
uniapp的app项目,在华为pad上运行,页面显示异常
uni-app
涛々17 小时前
uniapp-vue3-js-vite-pinia-eslint 快速开发模板
javascript·uni-app·uniapp+vue3模板
三天不学习18 小时前
使用Cursor + Devbox + Uniapp 一站式AI编程开发移动端(App、H5、小程序)
小程序·uni-app·ai编程
Q_Q5110082851 天前
python+django/flask+uniapp宠物中心信息管理系统app
spring boot·python·django·flask·uni-app·node.js·php
小刀拉屁股让你开开眼1 天前
uniapp 腾讯地图服务
uni-app
不爱搬砖的码农1 天前
使用 vscode 开发 uni-app 项目时如何解决 manifest.json 文件注释报错的问题
vscode·uni-app·json