uniapp自定义音频播放器Audio

<template>
	<view v-if='url' class='audio' >
		<view class='mr-3'  @click='start'>
			<image src='../../static/play.png' class='icon' v-show='!status'></image>
			<image src='../../static/stop.png' class='icon' v-show='status'></image>
		</view>
		<view class="flex">
			<view class="flex-1">
				{{title}}
			</view>
			<view v-if="show">
				<slider style="touch-action: none;" @change='changeAudio' 
						activeColor='#0E7EFC' :disabled="audioDisabled"
						:min='0' :max='duration.toFixed(0)' block-size='12'
						:value='currentTime.toFixed(0)' :step='0.1'>
				</slider>
			</view>
			<view v-if="!show" style="height: 60rpx;"></view>
			<view class='flex-2'>				
				<view class='ml-3'>{{getTime(Math.round(currentTime))}}</view>
				<view class='ml-3'>{{getTime(Math.round(totalTime))}}</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				context: null,
				currentTime: 0,
				duration: 100,
				totalTime:'',
				status: false,
				audioDisabled:true,
				url:'/static/Taylor Swift - Blank Space [mqms2].mp3',
				title:'泰勒·斯威夫特',
				show:true,
				
				runTime:0,
			};
		},
		created() {
			this.context = uni.createInnerAudioContext();
			this.context.src = this.url;
			this.context.startTime = 0;
			this.currentTime = 0;
			this.onTimeUpdate();
			this.onCanplay();
			this.onPause();
			this.onEnded();
			uni.$on('stop',()=> {
				this.context.stop();
				this.status = false;
			})
		},
		onHide() {
			uni.$emit("stop");
		},
		onUnload() {
			uni.$emit("stop");
		},
		methods:{
			start() { //点击播放
				if(this.status) {
					this.context.pause();
					this.status = !this.status;
				}else {
					// uni.$emit('stop')
					this.context.play()
					this.status = !this.status;
				}
			},
			onCanplay() { //进入可播放状态
				this.context.onCanplay(() => {
					console.log("播放的时长",this.context.duration);
					this.totalTime = this.context.duration;
					setTimeout(()=>{
						this.duration = this.context.duration;
					},1000)
				})
			},
			onPause(){ //监听暂停状态
				this.context.onPause(()=>{
					console.log("点击暂停了");
					//调接口保存学习进度
					
					
					
				})
			},
			onTimeUpdate() { //音频播放进度
				 this.context.onTimeUpdate(() => {
					 console.log("播放进度",this.currentTime);
					 if (!Number.isFinite( this.context.duration)) {
						this.context.currentTime = Number.MAX_SAFE_INTEGER;
						this.context.currentTime = 0;
					 } else {
						 this.duration = this.context.duration;
						 this.currentTime = this.context.currentTime;
						 this.runTime = this.context.currentTime;
					 }
				 })
			},
			onEnded() { //播放结束
				this.context.onEnded(()=> {
					//调接口保存学习进度
					
					
					
					
					this.status = false;
					this.currentTime = 0;
				})
			},
			changeAudio(e) {
				let paused = this.context.paused;
				this.context.pause();
				this.context.seek(e.detail.value)
				if(!paused) {
					this.context.play();
				} 
			},
			getTime(time) {
				let h = parseInt(time / 60 /60);
				let m = parseInt(time / 60);
				let s = time % 60;
				return this.towNum(h) + ':' + this.towNum(m) + ':' + this.towNum(s);
			},
			towNum(num) {
				if(num >= 10) {
					return num;
				}else {
					return '0' + num;
				}
			}
		}
	}
</script>

<style lang="scss">
	.audio {
		background: #F4F4F4;
		padding: 20rpx;
		display: flex;
		flex-direction: row;
		justify-content: space-between;
		align-items: center;
		.mr-3 {
			margin-right: 20rpx;
			.icon {
				width: 70rpx;
				height: 70rpx;
			}
		}
		.flex {
			flex: 1;
			.flex-1 {
				text-align: left;
				font-size: 34rpx;
				font-weight: 400;
				margin:0 36rpx;
			}
			.flex-2 {
				display: flex;
				flex-direction: row;
				justify-content: space-between;
				align-items: center;
				margin: 0 36rpx;
			}
		}
	}
</style>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以给你一些关于创建自定义HTML5音频播放器的建议。首先,你需要了解HTML5 audio元素的基本用法和属性。然后,你可以使用CSS来美化你的播放器,添加播放/暂停按钮、进度条和音量控制等功能。最后,你需要使用JavaScript来控制播放器的行为,例如播放、暂停、获取音频长度和当前进度等。 以下是一些可能有用的代码片段: 1. HTML5 audio元素: ```html <audio id="myAudio" src="audio.mp3"></audio> ``` 2. 播放/暂停按钮: ```html <button id="playButton">Play</button> ``` ```javascript var audio = document.getElementById("myAudio"); var playButton = document.getElementById("playButton"); playButton.addEventListener("click", function() { if (audio.paused) { audio.play(); playButton.innerHTML = "Pause"; } else { audio.pause(); playButton.innerHTML = "Play"; } }); ``` 3. 进度条: ```html <div id="progressBar"> <div id="progress"></div> </div> ``` ```css #progressBar { width: 100%; height: 10px; background-color: #ccc; } #progress { width: 0%; height: 100%; background-color: #000; } ``` ```javascript var audio = document.getElementById("myAudio"); var progressBar = document.getElementById("progressBar"); var progress = document.getElementById("progress"); audio.addEventListener("timeupdate", function() { var percent = (audio.currentTime / audio.duration) * 100; progress.style.width = percent + "%"; }); ``` 4. 音量控制: ```html <input type="range" id="volumeControl" min="0" max="1" step="0.1" value="1"> ``` ```javascript var audio = document.getElementById("myAudio"); var volumeControl = document.getElementById("volumeControl"); volumeControl.addEventListener("input", function() { audio.volume = volumeControl.value; }); ``` 希望这些代码片段能帮助你创建自定义HTML5音频播放器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值