零基础实现网易云音乐播放器


H5增加了很多的标签,面试的时候,如果面试官问你H5都有哪些新标签,你回答header、footer、nav。
这么回答几乎是无效的,因为这些标签在H5里面的角色,相当于鸡骨头、鱼刺、蘑菇腿——全是鸡肋,至少你得答出来audio、video、canvas,这些才是H5的核心功能,本文我们就重点说一下audio。
audio广泛的应用于各种项目中,游戏背景、各种播放器,可以说有声音的地方就有audio,当然因为各种限制和坑,很容易让前端人员陷入尴尬,比如在iphone下audio 是不允许autoplay的,如果前端人员不知道这个坑,产品经理又拿微信做对比,那这个锅前端就背定了。

所以本文通过对audio的核心知识的讲解,让用户一来不背锅,二来不加班。
第一步非常简单你就把audio当成图片使用,搞出个src,剩下ul是歌曲列表,然后是一堆功能按钮,不再赘述。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

<title>网易云音乐</title>

</head>
<body>
<audio src="mp3/千千阙歌.mp3" id="audio" controls></audio>
<h3>点击开始播放</h3>
<ul>
<li>
<a href="javascript:;">千千阙歌</a>
</li>
<li>
<a href="javascript:;">时间都去哪儿了</a>
</li>
<li>
<a href="javascript:;">小苹果</a>
</li>
<li>
<a href="javascript:;">夜的钢琴曲</a>
</li>
<li>
<a href="javascript:;">雨的印记</a>
</li>
</ul>
<div>
<div></div>
<div></div>
</div>
<div>
<input type="button" value="上一曲" id="prev">
<input type="button" value="播放" id="play">
<input type="button" value="下一曲" id="next">

    <input type="button" value="单曲循环" id="singleLoop">
    <input type="button" value="顺序播放" id="queue">
    <input type="button" value="随机播放" id="randomQueue">
    <input type="button" value="循环播放" id="menuloop">
</div>

</body>
</html>
这样的播放控制条很丑,产品经理会很不满意,当然了,如果产品经理说真好看,那你就换公司吧,我们需要隐藏控制条,然后自己用各种按钮和标签模拟一个。
第一个功能,播放暂停,
//播放
oPlay.onclick = function () {
if (oA.paused) {
this.value = ‘暂停‘
oA.play();
} else {
this.value = ‘播放‘
oA.pause();
}
};
然后整下一曲,
var arrSong = [
‘千千阙歌‘,
‘时间都去哪儿了‘,
‘小苹果‘,
‘夜的钢琴曲‘,
‘雨的印记‘
];

       //下一曲
        function play() {
            for (var i = 0; i < aA.length; i++) {
                aA[i].className = ‘‘;
            }
            aA[iNow].className = ‘on‘;
            oA.src = ‘mp3/‘ + arrSong[iNow] + ‘.mp3‘;
            oA.play();
        }
        //下一曲
        oNext.onclick = function () {
            iNow++;
            if (iNow >= arrSong.length) {
                iNow = 0;

            }
            oPlay.value = ‘暂停‘;
            play();
        };

这里大家要注意,我使用的是数组的形式,因为数组要比单独处理某一个音乐更方便。下面是单曲循环,
//单曲循环
oSingleLoop.onclick = function () {
oA.loop = !oA.loop;
};
这里涉及到一个坑,很多人会觉得我直接在mp3播放onend事件里面在播放一次原来的音乐不就可以了吗?
确实可以问题是麻烦,因为自身就有了loop属性,但是随机播放或者整个列表重复就没有属性了,这里就要使用switch case判断。

        //顺序播放
        oQueue.onclick = function () {
            oA.playState = 2;
        };
        //随机播放
        oRandomQueue.onclick = function () {
            oA.playState = 3;
        };
        //列表循环
        oMenuloop.onclick = function () {
            oA.playState = 4;
        };

        //播放完毕,单曲循环
        oA.onended = function () {
            switch (oA.playState) {
                case 2:
                    iNow++;
                    if (iNow < arrSong.length) {
                        play();
                    }
                    break;
                //随机
                case 3:
                    iNow = rnd(0, arrSong.length);
                    play();
                    break;
                //列表循环
                case 4:
                    iNow++;
                    if (iNow > arrSong.length) iNow = 0;
                    play();
                    break;

            }
        };

这里算是一个功能实现技巧,通过开关,上面说这些都很简单,我们实现一个看起来复杂其实非常简单的的功能,进度条,其实进度就是当前时间总时间,这里要用一个timeupdate事件,因为播放的过程中时间是不断变化的。

        oA.addEventListener(‘timeupdate‘, activeProgressBar, false);
        function activeProgressBar() {
            var percentNum = Math.floor((oA.currentTime / oA.duration) * 10000) / 100 + ‘%‘;
            progress.style.width = percentNum;
            progressBtn.style.left = percentNum;
        }

这里,给大家顺便留一个作业,如何实现进度条拖拽改变,播放进度呢?
var percentNum = (e.targetTouches[0].pageX - progressBar.getBoundingClientRect().left) / progressBar.getBoundingClientRect().width;
提示大家两个坑,第一个坑是mp3加载,建议使用preloadjs而不是preload属性。
第二给大家一个事件,
audio.addEventListener(‘loadedmetadata‘, function() {
console.log("Playing " + audio.src + ", for: " + audio.duration + "seconds.");
audio.play();
});
这个事件用在页面加载完,但是mp3如果没有加载到位会出现获取音乐时长NaN问题,用这个就OK了。
最后给大家留一个作业,
实现https://music.163.com/#/my/m/music/playlist网易云音乐App的上一曲、下一曲、单曲、列表循环、顺序播放,以及播放进度控制CD封面旋转功能。

·END·

原文地址:http://blog.51cto.com/13592288/2161605

时间: 2024-08-12 13:44:38

零基础实现网易云音乐播放器的相关文章

仿网易云音乐播放器(磁盘转圈、背景虚化等等)

先看效果,CSDN的git传上去总是不动.不知道为什么. 主要思路: 1 . 除了 開始/暂停 .上一首.下一首 这三个icon.你看到的是一个ViewGroup ,这个ViewGroup里面有圆形封面.黑色圈圈磁盘.唱针,高斯模糊背景图 2. 凝视掉了磁盘一起转动的效果,如今的方案不是最好的,建议若是想实现,能够把圆形封面和磁盘合并成一张图(最好在CicicleImageView这里面做).给一个旋转动画.两个动画.两个View,帧的频率不会那么高 3.凝视掉了上一首.下一首切换的时候渐变的动

网站添加左下角某易云音乐播放器代码

<!-- 音乐播放器 --><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css"> <div class="aplayer" data-id="2440040711" data-server="netease" data-type="playlis

Swift版本仿网易云音乐播放音乐动画效果

个人技术博客站欢迎您 创建一个继承于UIView的视图我们叫他XTActivityView /// 立方柱的个数 var numberOfRect = 0; /// 立方柱的颜色 var rectBackgroundColor: UIColor? /// 立方柱初始化大小 var defaultSize: CGSize? /// 立方柱之间的间距 var space: CGFloat = 0.0 进行初始化 override init(frame: CGRect) { super.init(fr

基于我们3组的网易云APP制作,找的APlayer H5音乐播放器

APlayer是一个非常漂亮的HTML5音频播放器,UI参考自网易云音乐外链播放器.它将audio标签封装,并结合CSS制作出漂亮的播放器UI,它支持设置歌名.歌手和歌词,可以设置是否自动播放,支持缩略图,支持播放进度以及设置播放源. HTML 首先是要加载播放器样式文件,这个播放器的样式酷似网易云音乐播放器.接着载入APlayer.js文件.然后在body中加入播放器div#player1,用于显示播放.<link rel="stylesheet" href="APl

非常漂亮的HTML5音乐播放器

APlayer是一个非常漂亮的HTML5音频播放器,它将audio标签封装,并结合CSS制作出漂亮的播放器UI,它支持设置歌名.歌手和歌词,可以设置是否自动播放,支持缩略图,支持播放进度以及设置播放源. 查看演示 下载源码 HTML 首先是要加载播放器样式文件,这个播放器的样式酷似网易云音乐播放器.然后在body中加入播放器div#player1,待会要调用播放.接着载入APlayer.js文件. <link rel="stylesheet" href="APlayer

4个小时实现一个HTML5音乐播放器

技术点:ES6+Webpack+HTML5 Audio+Sass 这里,我们将一步步的学到如何从零去实现一个H5音乐播放器. 首先来看一下最终的实现效果:Demo链接 接下来就步入正题: 要做一个音乐播放器就要非常了解在Web中音频播放的方式,通常都采用HTML5的audio标签关于audio标签,它有大量的属性.方法和事件,在这里我就做一个大致的介绍. 属性:src:必需,音频来源:controls:常见,设置后显示浏览器默认的audio控制面板,不设置默认隐藏audio标签:autoplay

小白学爬虫:网易云音乐歌单(一)

从零开始写爬虫,初学者的速成指南! 介绍 什么是爬虫? 先看看百度百科的定义: 号:923414804群里有志同道合的小伙伴,互帮互助,群里有不错的视频学习教程和PDF! 简单的说网络爬虫(Web crawler)也叫做网络铲(Web scraper).网络蜘蛛(Web spider),其行为一般是先"爬"到对应的网页上,再把需要的信息"铲"下来. 为什么学习爬虫? 看到这里,有人就要问了:google.百度等搜索引擎已经帮我们抓取了互联网上的大部分信息了,为什么还

网易云音乐歌单生成外链播放器

(一)自己创建的歌单没有生成外链选项的解决方法 解决方法: 1.分享歌单 2.打开分享界面的歌单链接 3.打开歌单即可看到生成外链的点击链接 (二)网易云音乐歌单因为版权原因无法生成外链的解决方法 1. 打开歌单页面,在"生成外链播放器"上右击,点击审查元素(检查)ctrl+shift+i: 2. 接着找到生成外链播放器这段文字直接双击复制前面的/outchain/0/577543756/ 3. 然后修改歌单链接示例:http://music.163.com/#/outchain/0/

仿照网易云音乐项目(自制音乐网页播放器)

最近准备把上一周做的一个仿网易云音乐的自制音乐网页播放器项目做一个总结. 相关功能如下: 1.通过后台页面上传歌曲.编辑歌曲功能.    2.前端页面自动更新播放热度高的歌曲    3.在线听歌.查看歌词.且配有相应的播放动画. 原文地址:https://www.cnblogs.com/gitnull/p/10041183.html