H5编写Audio音乐播放器——李帅醒博客

news/2024/7/19 13:11:11 标签: H5, 音乐播放器, js, js酷狗音乐, jsQQ音乐

音乐播放器canvas圆形音乐播放进度条" style="margin:0.8em 0px; padding:0px; font-weight:100; color:rgb(51,51,51); font-family:'microsoft yahei'; line-height:26px"> 今天教大家使用html5 Audio标签实现音乐播放器,模仿QQ音乐、天天动听等类似效果。这是我当年刚接触H5的一个小demo,适合初学者初考,代码也有很大的优化空间。


  1. audio
属性 属性值 注释
src url 播放音乐的url地址
preload load/auto 预加载
loop loop 循环播放
controls controls 是否显示默认的控制按钮
autoplay autoplay 自动播放



各大浏览器对音乐格式的支持情况

音频格式 Chrome Firefox IE9 Opera Safari
OGG 支持 支持 支持
MP3 支持 不支持 支持
WAV 不支持 支持 不支持

属性

属性 Chrome Firefox
duration 获取媒体文件的总时长,以秒(S)为单位,如果无法获取返回NaN
paused 如果媒体文件被暂停,那么paused属性返回true,反之false
ended 如果媒体文件播放完毕返回true
muted 用来获取是否为静音状态,值为bool
volume 控制音量的属性,值为0-1;0 为最小,1为最大
startTime 返回起始的播放时间
error 返回错误的代码,额uull的时候为正常,否则可以通过Music.error.code来获取具体繁荣错误代码:
currentTime 用来获取或者控制当前的播放时间,单位是秒(S)
currentSrc 以字符串的形式返回正在播放或者已经加载的文件

函数 作用
load() 加载音频,视频
play() 播放
pause() 暂停播放
canPlayType() 测试是否支持给定类型文件

常用的事件

事件名称 事件作用
loadstart 客户端开始请求数据
progress 客户端正在请求数据,缓冲
play  
pause  
ended  
timeupdate 当前播放时间发生改变的时候
canplaythrough 歌曲已经载入完全
canplay 缓冲至目前可播放的状态

注意事项:
1.由于音乐文件加载需要事件,所以不能立即取到audio.duration;
2.需要封装一个函数判断音乐播放完毕。
3.因为是移动端需要用rem进行自适应。
JS代码:
源码地址,可以去下载看看   http://download.csdn.net/download/wcslb/9740065
fn();
function fn(){
	var w = window.innerWidth / 30;
	var html = document.querySelector('html');
	html.style.fontSize = w + 'px';
};
window.onresize = fn;
$("#footer").load("footer.html");
//轮播图
var mySwiper = new Swiper('.swiper-container', {
	// 环路
	loop : true,
	//分页器
	pagination : '.swiper-pagination',
	paginationClickable :true,
})
// 当前播放的歌曲编号
var num=0;

var audio=document.querySelector("audio");
$(".songMenu").on('click',function(){
	 $("#songMenu").slideDown("fast");
})
$(".off").on('click',function(){
	$("#songMenu").slideUp("fast");
});
$("main").add("header").on('click',function(){
	$("#songMenu").slideUp("fast");
})

var musicArr=["mp3/袖手旁观.mp3","mp3/莫文蔚 (Karen Mok) - 当你老了.mp3","mp3/阿肆 - 我在人民广场吃炸鸡.mp3"]
//音播放开关乐
$(".stop").on('click',function(){
	if(audio.paused){
		Index(num);
		$("#dog").attr("class","dog");
		$(".stop").html("");
	}else{
		audio.pause();
		$("#dog").removeAttr("class","dog");
		$(".stop").html("");
	}
})
// 上一曲
$(".MovePrevious").on('click',function(){
	num=(3+--num)%3;
	Index(num);
});
//下一曲
$(".MoveNext").on('click',next);
	function next(){
		num=(++num)%3;
		Index(num);
	}
//点击主页歌单
$(".songMenu li").on('click',function(){
	num=$(this).index();
	Index(num);
})
//点击右侧歌单
$(".page2 li").on('click',function(){
	num=$(this).index();
	Index(num);
})
//重播
$(".playback").on('click',function(){
	audio.currentTime=0;
	audio.play();
})
$(".soundOff").on('click',function(){
	audio.muted ? $(".soundOff").html("") : $(".soundOff").html("");
	audio.muted=!audio.muted;
	
})

function Index(num){
	//开始播放歌曲
	audio.src=musicArr[num];		
	$(".stop").html("");
	audioPlay(musicArr[num],next);
	playingStyle();
}
function playingStyle(){
	// 主页歌单
	$(".Mname").css("color","#fff");
	$(".Msonger").css("color","#bbbab9");
	$(".songMenu li").eq(num).find("span").css("color","#955ebe");
	// 右侧歌单
	$(".Pname").css("color","#fff");
	$(".Psonger").css("color","#bbbab9");
	$("#page2 li").eq(num).find("span").css("color","#955ebe");
	//顶部信息
	$(".name").html($(".Pname").eq(num).html());
	$(".author").html($(".Psonger").eq(num).html());
}

function audioPlay(soundPath,callback){ 
    /*判断声音是否播放完成,播放完成之后执行回调函数*/
    audio.src=soundPath;   
    audio.play();
    if(callback != undefined){
        var  is_playFinish = setInterval(function(){
        if(audio.ended){
                    callback();
                    window.clearInterval(is_playFinish);
       		 }
       		if (!isNaN(audio.duration)) {
            var timeValue = audio.duration; 
            //音乐时间
            var m=parseInt(timeValue/60);
            var s=parseInt(timeValue%60);
            	s<10 ? s="0"+s : s=s;
            $(".startTime").html(m+":"+s);
            //当前播放时间
            var NowtimeValue = audio.currentTime;
            var nowM=parseInt(NowtimeValue/60);
            var nowS=parseInt(NowtimeValue%60);
                nowS<10 ? nowS="0"+nowS : nowS=nowS;
            $(".endTime").html(nowM+":"+nowS);
			// 用时间比来获取进度条的值
            var progressValue =100*(audio.currentTime/audio.duration); //
            $("progress").val(progressValue);
       	 	};
        }, 10);
    }
}
(我吃酸萝卜 新浪微博http://www.weibo.com/wcslb          ---李帅醒著)




http://www.niftyadmin.cn/n/624744.html

相关文章

h5自我介绍作品_自我介绍h5模板

1.平面设计简历自我介绍怎么写&#xff1f;平面设计个人简历范文介绍人们在寻找工作的时候&#xff0c;肯定是希望有更多的公司HR查看自己的简历&#xff0c;毕竟这个人数越多就代表着找到工作的几率越大&#xff0c;这就需要大家精心做好个人简历的每一部分&#xff0c;包括自…

用Express的搭建简单路由——李帅醒博客

Express为我们提供了很f方便的路由功能&#xff0c;今天就为大家讲解一下如何用express搭建路由。 1.&#xff08;可选&#xff09;&#xff08;全局安装&#xff09; 安装淘宝镜像 npm install -g cnpm --registryhttps://registry.npm.taobao.org 由于npm网站在国外,…

阮一峰 python_React Router 使用教程(阮一峰)

真正学会 React 是一个漫长的过程。你会发现&#xff0c;它不是一个库&#xff0c;也不是一个框架&#xff0c;而是一个庞大的体系。想要发挥它的威力&#xff0c;整个技术栈都要配合它改造。你要学习一整套解决方案&#xff0c;从后端到前端&#xff0c;都是全新的做法。举例来…

eplan端子连接图模板设置_【EPLAN】端子管理-单层端子与多层端子的使用

1.端子和端子排的概念(下图是欧式端子)(1)端子&#xff1a;图中单片的叫端子。(2)端子排&#xff1a;两边两个固定块之间的很多个端子组成的叫做端子排。(3)跳线&#xff1a;EPLAN中分两种&#xff0c;一种是鞍型跳线&#xff0c;一种是接线式跳线。左边第一个 黄色 的三叉&…

微信公众平台web开发教程——李帅醒博客

如今微信已经成为日常生活中必不可缺少的一部分&#xff0c;微信用户到目前已经达到3个亿了吧&#xff01;每个用户都或多或少的关注过一些公众账号&#xff0c;作为一名合格的前端&#xff0c;你怎么可以。闲话不多说了下面开始教大家微信开放平台。 前期准备 &#xff1a; …

ug区域轮廓铣没有重叠距离_UG数控加工的参数设置(新手必看)

UG数控加工的参数设置(新手必看)切削参数打开“切削参数”图标&#xff0c;系统会显示“切削参数”对话框&#xff0c;第一栏&#xff1a;策略&#xff08;既一些加工参数值的设定&#xff09;1、 切削方向&#xff1a;顺铣&#xff1a;刀具一般多采用顺铣&#xff0c;因为由顺…

Vue-resource实现ajax请求和跨域请求--李帅醒博客

vue-resource是Vue提供的体格http请求插件&#xff0c;如同jQuery里的$.ajax&#xff0c;用来和后端交互数据的。 在使用时&#xff0c;首先需要安装vue-resource插件1.在项目跟目录上安装&#xff1a; npm install vue-resource2.引入resource插件import VueResource from vue…

Js实现点击查看全文(类似今日头条、知乎日报效果)

这篇文章主要为大家详细介绍了原生JScss仿QQ今日头条、知乎日报点击查看全文的效果&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下. 移动端demo展示 王者荣耀攻略网 需要设置过最大高度max-height,然后把超出部分隐藏。判断内容是否超出指定高度&…