uniapp:音乐播放器

news2024/12/23 11:53:58

功能要求:全局音乐播放,可以上一首,下一首,暂停,播放。

1、mixins

export default {
	data() {
		return {
			audio: null, // 音频对象
			playlist: [{
				url: require('../static/1.mp3')
			}, {
				url: require('../static/2.mp3')
			}, {
				url: require('../static/3.mp3')
			}, {
				url: require('../static/4.mp3')
			}], // 播放列表
			currentIndex: 0, // 当前播放的歌曲索引
			loopMode: 'list', // 循环模式('single'表示单曲循环,'list'表示列表循环)
			is_bf: false,
		}
	},
	methods: {
		playAudio(src) {
			// 创建音频对象
			if(!this.audio){
				console.log('注册');
				this.audio = uni.createInnerAudioContext();
			}
			
			this.audio.src = src;

			// 监听音频播放结束事件
			this.audio.onEnded(() => {
				this.nextAudio();
			});

			// 监听音频播放错误事件
			this.audio.onError((err) => {
				console.error('音频播放出错:', err);
			});

			// 开始播放音频
			this.audio.play();
			this.is_bf = true
		},
		pauseAudio() {
			if (this.audio) {
				this.audio.pause();
				this.is_bf = false;
			}
		},
		resumeAudio() {
			if (this.audio) {
				this.audio.play();
				this.is_bf = true;
			}
		},
		nextAudio() {
			this.audio.destroy();
			this.audio = null;
			console.log('销毁');
			if (this.currentIndex === this.playlist.length - 1) {
				// 如果是最后一首歌曲,根据循环模式判断下一曲
				if (this.loopMode === 'single') {
					this.playAudio(this.playlist[this.currentIndex].url);
				} else if (this.loopMode === 'list') {
					this.currentIndex = 0;
					this.playAudio(this.playlist[this.currentIndex].url);
				}
			} else {
				// 播放下一首歌曲
				this.currentIndex++;
				this.playAudio(this.playlist[this.currentIndex].url);
			}
		},
		prevAudio() {
			this.audio.destroy();
			this.audio = null;
			console.log('销毁');
			if (this.currentIndex === 0) {
				// 如果是第一首歌曲,根据循环模式判断上一曲
				if (this.loopMode === 'single') {
					this.playAudio(this.playlist[this.currentIndex].url);
				} else if (this.loopMode === 'list') {
					this.currentIndex = this.playlist.length - 1;
					this.playAudio(this.playlist[this.currentIndex].url);
				}
			} else {
				// 播放上一首歌曲
				this.currentIndex--;
				this.playAudio(this.playlist[this.currentIndex].url);
			}
		},
	},
}

2、music组件

<template>
	<view class="music_box df-aic-jusb">
		<view class="df-aic">
			<image src="../../static/img/43.png" mode="" class="icon"></image>
			<view class="right">
				<view class="fsz-26 fw-b u-line-1">周杰伦,天涯过客</view>
				<view class="fsz-22 u-line-1">张韶涵</view>
			</view>
		</view>
		<view class="df-aic">
			<image src="../../static/img/39.png" mode="" class="icon2" @click="playPrevAudio"></image>
			<image src="../../static/img/42.png" mode="" class="icon2" @click="playSelectedAudio(is_bf)" v-if="!is_bf"></image>
			<image src="../../static/img/41.png" mode="" class="icon2" @click="playSelectedAudio(is_bf)" v-else></image>
			<image src="../../static/img/40.png" mode="" class="icon2" @click="playNextAudio"></image>
		</view>
	</view>
</template>
<script>
	export default {
		mounted() {

		},
		methods: {
			playSelectedAudio(is) {
				if(!this.audio){
					this.currentIndex = 0;
					const audioSrc = this.playlist[this.currentIndex].url;
					this.playAudio(audioSrc);
				}else{
					if(!is){
						this.resumeAudio()
					}else{
						this.pauseAudio()
					}
				}
			},
			playNextAudio() {
				if(!this.audio){
					this.playSelectedAudio()
				}else{
					this.nextAudio();
				}
				
			},
			playPrevAudio() {
				if(!this.audio){
					this.playSelectedAudio()
				}else{
					this.prevAudio();
				}
			},
		},
	}
</script>

<style scoped lang="scss">
	.music_box {
		width: 690rpx;
		height: 88rpx;
		background: rgba(37,52,89,0.8);
		border-radius: 10rpx;
		border: 1rpx solid #FFFFFF;
		margin: 30rpx auto 30rpx;
		padding: 0 20rpx;
		.right{
			width: 320rpx;
		}
		.icon{
			width: 64rpx;
			height: 64rpx;
			margin-right: 20rpx;
			border-radius: 10rpx;
		}
		.icon2{
			width: 30rpx;
			height: 30rpx;
			margin-left: 38rpx;
		}
		.fsz-22{color: #8D9BB9;}
	}
</style>

在这里插入图片描述
1、mixins中的playlist自行实现接口获取数据。
2、H5,APP已测试可用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多接入边缘计算赋能的AI质检系统任务实时调度策略

源自&#xff1a;电子与信息学报 作者&#xff1a;周晓天, 孙上, 张海霞, 邓伊琴, 鲁彬彬 “人工智能技术与咨询” 发布 摘 要 AI质检是智能制造的重要环节&#xff0c;其设备在进行产品质量检测时会产生大量计算密集型和时延敏感型任务。由于设备计算能力不足&#xff0c…

少儿编程机器人技术架构解析与实现流程

随着科技的飞速发展&#xff0c;少儿编程机器人成为了越来越受欢迎的教育工具&#xff0c;为孩子们提供了学习编程的新途径。在这篇文章中&#xff0c;我们将深入探讨少儿编程机器人的技术架构和实现过程&#xff0c;揭示背后的技术原理和开发策略。同时&#xff0c;我们也将介…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

http协议中的强缓存与协商缓存,带图详解

此篇抽自本人之前的文章&#xff1a;http面试题整理 。 别急着跳转&#xff0c;先把缓存知识学会了~ http中的缓存分为两种&#xff1a;强缓存、协商缓存。 强缓存 响应头中的 status 是 200&#xff0c;相关字段有expires&#xff08;http1.0&#xff09;,cache-control&…

案例分析篇03:一篇文章搞定软考设计模式考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Django环境下使用Ajax

Django环境下使用Ajax 目录 Django环境下使用Ajax介绍前情提要示例JS实现Ajax实现 传递JSON格式数据传递文件数据Django自带的序列化组件基于jsonresponse序列化数据基于Django自带的serializers 注册示例 介绍 AJAX 的主要目标是在不刷新整个页面的情况下&#xff0c;通过后台…

活动图高阶讲解-02

130 00:07:05,080 --> 00:07:06,680 这是历史 131 00:07:06,680 --> 00:07:11,400 那么在这个过程中 132 00:07:11,400 --> 00:07:14,840 就会出现多种变体了 133 00:07:14,840 --> 00:07:15,560 一个变体 134 00:07:15,560 --> 00:07:16,640 就是BPMN 135…

7.无重复字符的最长字串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb" 输出: 1 解释: 因为…

【包邮送书】Elasticsearch 通过索引阻塞实现数据保护深入解析

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

【C++干货基地】面向对象核心概念与实践原理:拷贝构造函数的全面解读

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

Learn OpenGL 07 摄像机

定义摄像机参数 glm::vec3 cameraPos glm::vec3(0.0f, 0.0f, 3.0f);//摄像机位置glm::vec3 cameraTarget glm::vec3(0.0f, 0.0f, 0.0f);glm::vec3 cameraDirection glm::normalize(cameraPos - cameraTarget);//摄像机方向&#xff0c;指向z轴正方向 glm::vec3 up glm::vec…

套接字编程 --- 三

目录 1. 前置性知识 1.1. listen 系统调用 1.2. accept 系统调用 1.3. 如何通信 1.3.1. read 系统调用 && write系统调用 1.3.2. recv 系统调用 && send 系统调用 2. TCP --- demo 2.1. Tcp_Server.hpp (version 1) 2.2. Tcp_Server.hpp (version 2…

[AIGC] Kafka解析:分区、消费者组与消费者的关系

Apache Kafka是一个分布式事件流平台&#xff0c;它是处理实时数据的强大工具。而理解Kafka的关键概念&#xff1a;分区&#xff08;Partition&#xff09;、消费者组&#xff08;Consumer Group&#xff09;和消费者&#xff08;Consumer&#xff09;的关系对于正确地使用Kafk…

C语言--- 指针运算笔试题详解

目录 题目1&#xff1a; 题目2&#xff1a; 题目3&#xff1a; 题目4&#xff1a; 题目5&#xff1a; 题目6&#xff1a; 题目7&#xff1a; 题目1&#xff1a; #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);print…

C#与WPF通用类库

个人集成封装&#xff0c;仓库已公开 NetHelper 集成了一些常用的方法&#xff1b; 如通用的缓存静态操作类、常用的Wpf的ValueConverters、内置的委托类型、通用的反射加载dll操作类、Wpf的ViewModel、Command、Navigation、Messenger、部分常用UserControls(可绑定的Passwo…

蓝桥杯-ISBN号码

此题然让本人纠结了很久&#xff0c;真的好多坑。。。。果然还是太菜了。 完整代码以及思路解析(在注释中) #include <iostream> using namespace std; int main() {string num;cin>>num; int count0;int w1;for(int i0;i<10;i){if((i!1)&&(i!5)) //坑…

Node.js作用

Node.js可以开发应用 开发服务器应用 开发工具类应用 开发桌面端应用

Discord OAuth2授权以及机器人监听群事件

下面文章讲解获取OAuth2授权整个流程&#xff0c;创建机器人&#xff0c;使用机器人监听工会&#xff08;工会就是创建的服务器&#xff09;成员变化等等&#xff0c;对接国外的都是需要VPN的哦&#xff0c;对接的时候记得提前准备。 创建应用 点击 此页面添加应用,&#xff…

EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测

EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测 目录 EI级 | Matlab实现GCN基于图卷积神经网络的数据多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.GCN基于图卷积神经网络的数据分类预测 Matlab2023 2.多输入单输出的分类预测&#xf…

汽车电子:均胜电子、德赛西威“跑出”第二增长曲线

问界新M7上市以来销量势如破竹&#xff0c;华为汽车及相关均胜电子、联创电子、光峰科技等供应链企业也因此受益。 网络公开数据&#xff0c;在2024年1月1日-2月18日&#xff0c;中国市场新势力品牌销量排行榜中&#xff0c;问界就以4.25万辆的销量成绩霸榜第一&#xff0c;作…