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>
相关推荐
半兽先生2 小时前
uniapp高性能ui框架uni-ui
ui·uni-app
qq_316837754 小时前
uniapp 观察列表每个元素的曝光时间
前端·javascript·uni-app
iOS阿玮7 小时前
打个广告,帮忙招一个iOS开发的扛把子~
uni-app·app·apple
Cerrda7 小时前
🌟让你的uniapp应用拥有更现代的交互体验,一个支持滚动渐变透明的导航栏组件🌟
uni-app
2501_916007479 小时前
iOS 应用性能测试的工程化流程,构建从指标采集到问题归因的多工具协同测试体系
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张12 小时前
iOS 抓不到包怎么办?从 HTTPS 解密、QUIC 排查到 TCP 数据流分析的完整解决方案
android·tcp/ip·ios·小程序·https·uni-app·iphone
前端互助会12 小时前
UNI-APP开发APP避坑指南:这些关键事项你必须掌握
uni-app
游戏开发爱好者81 天前
iOS 商店上架全流程解析 从工程准备到审核通过的系统化实践指南
android·macos·ios·小程序·uni-app·cocoa·iphone
toooooop81 天前
Vuex 中 state、mutations 和 actions 的原理和写法
前端·javascript·uni-app
林_xi1 天前
uniapp使用@uni-ku/root插件实现全局组件
前端·uni-app