植物百科网
当前位置: 首页 农业百科

最新款音乐播放器(酷炫音乐播放器)

时间:2023-07-21 作者: 小编 阅读量: 1 栏目名: 农业百科

目录结构如图,我已经在mp3文件夹内添加了两首歌,现在打开index.html,里面是一个简单的模板。<audiosrc='mp3/1.mp3'controls=""></audio>第一步.用js来创建一个audio元素。等以后做得比较完善的时候,我们完全可以将这个对象放到js文件里,作为一个js插件被其他页面来调用。js基础我以后会专门开贴来总结,现在先就这么写下去吧。封装插件也是学习js的一大乐趣呢!

接触简书也有一段日子了,这中间的时光还是比较轻松加愉快的,那种可以和他人分享知识的欣喜和愉悦的确是非常棒。我一向都是觉得专心写自己的文就可以了,不会总是纠结有多少人在看,有多少点击等等。用心写好自己的文,体会那种分享的快乐,就可以了。

之前写的《js常用方法和一些封装》系列暂且告一段落,接下来,我会通过各种案例,来分享javascript的各种技巧,所以最终将这个系列的名称定为:《从案例中学习JavaScript》,回想到自己初学编程时候的各种艰辛,买了很多书,然而这些书大多为泛泛而谈,或者东拼西凑。市面上充斥着各种多少多少天从入门到精通的书籍,我曾经也花了好多大洋,满怀信心地买了类似的书,结果我就零基础从入门到蒙逼了。

经过几年的摸索,我最终发现,知识点还是必须在工作中去练习才能真正的理解,或者通过一个具体的案例来融汇贯通。当然,我指的案例不是那种很多线下培训机构为了讲知识点而弄出来的案例。

比如这样的:

for (var i = 0; i < 3 ; i) { alert(i);}

这就是典型的为了讲而讲,案例非常枯燥不说,而且花费大量的时间来练习这种语法级别的东西,堆砌这种并没有什么意思的案例,真的很难引起初学者的兴趣。

很多线下的培训机构,包括大多数大学里的课程,就是这么做的。比如JAVA,一开始都会教着打印一个HelloWorld,然后中规中矩地讲解for循环,打印九九乘法表。

接着,一个必然会讲的东西就是冒泡排序,很多初学者在此卡壳,觉得JAVA怎么这么难啊!于是,他们开始自暴自弃,为了学而学,也不知道学了有什么用?

好不容易培训完了,工作了几年,突然发现,我好像从来没用到什么冒泡排序啊?

诚然,你不去当算法工程师,就算会了冒泡排序又怎样呢?算法这东西,需要时间的积累和技术的沉淀,我始终认为初学编程应该将重心放在方法的调用和兴趣的培养上面,最起码,必须得做点东西出来。基本的算法,时间长了自然会,初学者真没必要花太多的时间在算法上,逻辑思维清晰的话还好一些,如果不是呢,那么很可能就会在刚开始学编程的时候就产生烦躁的情绪,这实在是得不偿失。

好了,扯犊子结束了,下面开始愉快的编程之旅吧!

第一个案例,就做一个简单的音乐播放器吧。

目录结构

如图,我已经在mp3文件夹内添加了两首歌,现在打开index.html,里面是一个简单的模板。

<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>音乐小站</title> </head> <body></body> <script type="text/javascript"></script></html>

1. 利用audio标签渲染一个播放器

<audio src='mp3/1.mp3' controls=""></audio>

audio是h5的一个标签,以上代码表示创建了一个播放器,并且播放文件指向了1.mp3这首歌,controls代表使用浏览器自带的播放器界面。

渲染效果如图,感觉还不错,点击左边的播放按钮就可以播放这首歌了哦。

2. 用js来控制音乐播放器

现在,我们不用浏览器自带的控制界面,单纯地用js来操作。因为自带的界面未必能满足我们的需要,比如上一首,下一首,歌词等等。

我们将这一行代码删除。

<audio src='mp3/1.mp3' controls=""></audio>

第一步. 用js来创建一个audio元素。

var musicDom = document.createElement('audio');

第二步. 加载一首音乐。

musicDom.src = 'mp3/2.mp3';

第三步. 播放音乐。

musicDom.play();

这样的话,当我们在此刷新页面,歌曲就会被自动播放。

第四步. 开始将基本的方法封装起来

一个音乐播放器,最基本的功能有:

1.初始化

2.添加歌曲

3.播放

4.暂停

5.下一首

6.上一首

var musicBox= {musicDom : null, //播放器对象 songs : [], //歌曲目录,用数组来存储//初始化音乐盒 init : function(){ this.musicDom = document.createElement('audio'); },//添加一首音乐 add : function(src){ this.songs.push(src); },//根据数组下标决定播放哪一首歌 play : function(index){ this.musicDom.src = this.songs[index]; this.musicDom.play(); },//暂停音乐 stop : function(){ this.musicDom.pause(); },//下一首(待编写) next : function(){},//上一首(待编写) prev : function(){}}

我们将逻辑代码用一个json对象包裹了起来,对音乐播放器进行了简单的封装,这样看起来条理会比较清晰。其实,这已经是一个简单的js小插件了,不是吗?等以后做得比较完善的时候,我们完全可以将这个对象放到js文件里,作为一个js插件被其他页面来调用。

js基础我以后会专门开贴来总结,现在先就这么写下去吧。

封装插件也是学习js的一大乐趣呢!

好了,来测试一下吧:

musicBox.init(); //初始化musicBox.add('mp3/1.mp3');musicBox.add('mp3/2.mp3');musicBox.play(0); //听第一首歌

刷新页面,虽然啥也没有,但是动听的音乐已然响起,我这边的第一首歌曲是火影忍者的主题曲,很带感哦。

第五步. 画一个样式吧!

这一步,我们来简单绘制一个播放器的样式,我尽可能写详细一点:

css:

width: 200px;height:300px;background:#ccc;

html:

<div id='music' class='music'></div>

效果:

接下来,让这个div盒子相对于body居中。

还记得上一节《js常用方法和一些封装》-- 时间相关(附案例详解)吗,里面就有一个现成的居中方法,还有获取元素的方法。现在我们拿过来直接用:

//让元素居中的方法

function _center(dom){

dom.style.position = 'absolute';

dom.style.top = '50%';

dom.style.left = '50%';

dom.style['margin-top'] = - dom.offsetHeight / 2'px';

dom.style['margin-left'] = - dom.offsetWidth / 2'px';

}

//根据id获取元素

function dom(id){

if(id.toString().indexOf('#') != -1) {

id = id.replace('#','');

}

return document.getElementById(id);

};

调用

var musicDom = dom('#music');_center(musicDom);

成功居中了。

接下来,我们将颜色调深一点,然后加上一点圆角:

background:#333;border-radius: 5px;

再加上一点盒阴影 :

box-shadow: 3px -3px 3px #666;

Paste_Image.png

这样就有一点阴影效果了。

下面,我们来绘制屏幕和按钮区:

css:

.music { width: 200px; height:300px; background:#333; border-radius: 5px; box-shadow: 3px -3px 3px #666; position: relative;}.music .screen { height:70%; width:96%; background: #ccc; margin-left:2%; margin-top: 2%;}.music .buttons { height:25%; width:96%; background: wheat; margin-left:2%; margin-top: 2%;}

html:

<div id='music' class='music'> <div class='screen'></div> <div class='buttons'></div></div>

效果:

Paste_Image.png

我打算在屏幕区域加一个音乐的图标,顺便分享一下iconfont的使用吧。

番外:矢量图标icontont的使用

这是阿里巴巴的一个矢量图标库,打开官网:

点击所有公开库,

搜索音乐,寻找我们需要的图标::

在搜索你喜欢的按钮:

总之,你想要什么图标,直接搜索就可以了。

我随便挑了几个按钮,

点击下载至本地,然后解压:

里面有一个demo.html页面,里面详细介绍了iconfont的使用方法。

1.将如图框起来的文件拷贝到项目的css文件夹,引入css文件

<link rel="stylesheet" type="text/css" href="css/iconfont.css"/>

2.现在我们引入这个图标

<div id='music' class='music'> <div class='screen'> <i id='music-icon' ></i> </div> <div class='buttons'></div></div>

效果:

现在,我们还是要把这个小图标居中显示。

var musicIcon = dom('#music-icon');_center(musicIcon);

咦,好像不对哦,看样子是相对于最外面的music盒子居中定位了呢。

这是咋回事呢?通过这个小bug,可以引出一个定位的知识点。

原来,我们居中的原理是设置子元素的position为absolute,然后用top和left来实现的,如果父盒子没有设置position,那么子元素会一直往上找,直到碰上一个有position并且不是static的元素来做定位。

在这个案例中 ,<div id='music' class='music'></div>是有定位的,所以就相对于它居中了。

了解原因之后,我们来给屏幕区域加一个position吧!

问题来了,给它设置absolute还是relative呢?

先看看加absolute的效果吧:

position: absolute;

靠,按钮去不见了,吓得我马上F12打开调试模式一探究竟。

如图,原来是挤上去了呀。其实道理也很简单,当一个元素的position设置为absolute的时候,它就脱离文档流,也就是说不占位置了。所以下面的div元素就会挤上来。就这么简单。

而relative会保持之前的位置,不脱离文档流。

position: relative;

成了,然后我们来调个色,把图标也弄得大一点。

.music { width: 200px; height:300px; background:#333; border-radius: 5px; box-shadow: 3px -3px 1px #666; position: relative;}.music .screen { height:70%; width:96%; background: linear-gradient(#403d3d,65%,#5f5b5b); margin-left:2%; margin-top: 2%; position: relative; }.music .screen i { color:#fff; font-size: 88px;}.music .buttons { height:25%; width:96%; margin-left:2%; margin-top: 2%;}

然后把按钮添加上去:

css:

.music .screen i { color:#fff; font-size: 88px;}.music .buttons i { color:#fff; font-size: 24px; margin-left: 28px; position: relative; top:25px;}.music .buttons i:hover { cursor: pointer;}

html:

<div id='music' class='music'> <div class='screen'> <i id='music-icon' ></i> </div> <div class='buttons'> <i id='prev' ></i> <i id='play' ></i> <i id='next' ></i> </div></div>

效果图:

这是一套纯黑色系的皮肤,你也可以自己设置css样式来自定义喜欢的皮肤哦。

F12进入调试模式,像这样:

你想要什么颜色都可以!

红色:

蓝色:

银色:

土豪金:

在下一节,我们尝试把各种皮肤封装到组件里。

时间不早了,今天只完成了一个模板,下次我们再聊吧!

勘误:

iconfont的图片编码没能正常显示,可能是markdown编辑器不支持吧。

就是如图所示的编码,markdown编辑器没有正常显示出来,额,这个小细节就先忽略吧,嘿嘿。

    推荐阅读
  • 突触名词解释(突触是什么意思)

    突触名词解释突触是指一个神经元的冲动传到另一个神经元或传到另一细胞间的相互接触的结构。突触是神经元之间在功能上发生联系的部位,也是信息传递的关键部位。在光学显微镜下,可以看到一个神经元的轴突末梢经过多次分支,最后每一小支的末端膨大呈杯状或球状,叫做突触小体。这些突触小体可以与多个神经元的细胞体或树突相接触,形成突触。从电子显微镜下观察,可以看到,这种突触是由突触前膜、突触间隙和突触后膜三部分构成。

  • 《守望先锋》对战局影响大招top一览 守望先锋对局战绩

    今天小编要为大家带来的是玩家“黑呦酱”分享的《守望先锋》对战局影响大招top一览,感兴趣的玩家赶紧一起来看看吧!守望先锋大招分为四类,控制类,自身BUFF类,辅助类以及伤害类,由于伤害类大部分使用大招时,本体无法进行有效杀伤,且控制类及自身BUFF类需要其他技能的配合,so,此间因素也要加入考量。

  • 运动后喝黑咖啡还能燃脂吗 运动时喝黑咖啡会加快燃脂吗?

    2、运动过程中身体脂肪会加速燃烧,从而具有一定减肥作用;而黑咖啡热量比较小,加上其中含有大量的咖啡因以及维生素、纤维素物质,适量喝可以促进人体肠胃蠕动,加速脂肪代谢分解,对减肥具有促进作用。

  • 斯威汽车质量怎么样(斯威质量好不好)

    2018年6月起,斯威“品质特工队”以四大火炉的重庆作为起点,途径海南、吐鲁番、格尔木三地,历时近一年进行了数十万公里极限环境适应性试验。极端干燥高温环境下,常见车内温度往往会狂飙到60℃以上,而在斯威G01的车厢里,却始终能够保持清新凉爽的状态。一整套严酷考验下来,斯威G01的性能表现完全得以充分认证。这样一算,斯威G01差不多完成了近百万公里的专业级严酷考验。

  • 春天兰花怎么养 春天兰花怎么养浇水

    白墨兰花哪个品种最好白墨兰花是墨兰的珍贵变异品种假鳞茎椭圆形,已有数百年栽培历史,流传至今,不下十数个品种,它叶色莹润、体态优雅、幽香静远、且抗病,白墨兰花比较好的品种一般分企剑和软剑两个品系。什么兰花开花最香兰花品种很多,按花香来排,在兰花界春兰居首,惠兰次之,随后便是建兰、墨兰和寒兰,春兰的花香味最正宗,持久性也极强。

  • 奔驰e300l前进挡总共有几个(你看了奔驰22款E300L升级这套原厂HUD抬头显示效果觉得怎么样)

    从行车安全的角度来考虑,加装一台HUD是非常有必要的。HUD的全称是HeadUpDisplay,中文翻译过来就是抬头显示器。今天星骏汇小陈通过以上的产品配件图了解,我们看到这台奔驰22款E300L升级HUD抬头显示所需要更换的配件有,抬显仪器,高配仪表盖板,高配仪表电脑,雨量传感器,空调管升级HUD抬头显示把仪表台上的那一块盖板换掉,换成高配的预留好显示器孔位的盖板,装上显示器,从而使仪表显示的内容投射到挡风玻璃上面。

  • 儿童葫芦丝表演(通城千人共奏葫芦丝)

    儿童葫芦丝表演香城都市报讯 10月27日,通城县隽水中学参加湖北省“黄鹤杯”美育节节目视频录制现场,七、八年级千名学生,同奏乐曲《龙的传人》。该校相关负责人介绍,本学期,每天下午预备铃响5分钟,七、八年级各班集体合奏葫芦丝。丝竹声声,已渐成校园一道靓丽的风景线。近年来,该校贯彻落实社会主义核心价值观,注重未成年人思想道德建设,坚持开设中华传统和特色民族特色教育课程,促进学生“德智体”全面发展。

  • 鸡娃时代孩子的成长之道(与其1岁就开始鸡娃)

    出生时大脑发育已经完成25%,1岁完成了50%,3岁完成了60%,6岁达到90%。现在小学虽然是零基础入学,取消了统一考试,但是它对学生的要求并没有降低。吃够了佛系养娃的亏,橙子家的老二断然不肯再佛系养了。北京卫视于2018年摄制的纪录片《起跑线》中,有一个7岁的北京女孩令人印象深刻。她的家庭,在北京三环内有一套房,一辆车。妈妈认为,孩子从小培养兴趣,靠的是父母的指引。

  • 环氧树脂的作用与用途(环氧树脂有什么作用与用途)

    环氧树脂的作用与用途具有优良的物理和电绝缘性能,强度高、收缩性低,耐腐蚀以及有高绝缘的优势,所以被称为万能胶。电器、电机绝缘封装件的浇注。从常压浇注、真空浇注已发展到自动压力凝胶成型。长时间接触胶水时,有人会有细微的皮肤过敏和细微瘙痒疼痛的情况,建议在运用时戴上防护手套,如果出现了这样的情况,需要用酒精擦洗,然后用清水冲洗干净。

  • 明月曾照江东寒剧情(明月曾照江东寒剧情介绍)

    明月曾照江东寒剧情剧情简介:美少女战清泓是武林副盟主战破敌之女,从小被父亲禁止涉及江湖事。十年一期的武林大会即将来临,战清泓瞒着家人偷跑下山,立志夺取武林盟主之位。战清泓与温宥也开始互生情愫,奈何最终被世俗礼法所阻碍。与此同时,江湖上风起云涌,战清泓发现自己自幼背诵的家训竟是人人趋之若鹜的第一神功《鹤羽剑法》。