用html制作一个音乐排行榜,使用原生JavaScript制作一个漂亮的音乐播放器
简单介绍
起初在简书上发现了这篇博客——【html、css、jq】制作一个简洁的音乐播放器。这是一个用jQuery库实现的音乐播放器,界面简约大气。
我在这个基础上,反其道而行,使用原生JavaScript实现。这个播放器是面向移动端的设备。在此感谢饥人谷和张新望,有了他们开路,使用原生的JS实现起来也并不费力。
音乐是通过豆瓣FM的API获取到的
界面类似于网易云音乐的样子
播放器的界面
怎么样,样式还可以吧?比较简单,最下面是可以操作的进度条和按钮,按钮从左至右依次是“显示歌词/隐藏歌词”、“切换频道”、“播放/暂停”、“下一曲”、“随机播放/单曲循环”。只有下一曲,没有上一曲,而且你永远不知道下一曲是啥,所以title就用了“与喜欢的音乐不期而遇”。
HTML部分
与喜欢的音乐不期而遇
![](img/pic.jpg)
页面主要分为三部分,最上面的歌名和歌手名,中间的唱片和歌词,下面的操作面板,最下方,class为glass的div和img是整个页面的背景。
CSS部分
JavaScript部分
js目录结构
这里面使用了一个flexible.js文件。这是rem布局(所以css文件里有好多单位是rem)为了多终端适配而增加的一个库。了解更多
还使用了一个original_ajax.js文件,封装一个ajax方法,用来发送Ajax请求
先把页面滚动禁掉(index.js)
//取消body的touchmove默认行为,阻止页面滚动
document.body.addEventListener('touchmove', function (event) {
event.preventDefault();
}, false);
original_ajax.js
/* 封装ajax函数
* @param {string}opt.type http连接的方式,包括POST和GET两种方式
* @param {string}opt.url 发送请求的url
* @param {boolean}opt.async 是否为异步请求,true为异步的,false为同步的
* @param {object}opt.data 发送的参数,格式为对象类型
* @param {function}opt.success ajax发送并接收成功调用的回调函数
*/
function ajax(opt) {
opt = opt || {};
opt.method = opt.method.toUpperCase() || 'POST';
opt.url = opt.url || '';
opt.async = opt.async || true;
opt.data = opt.data || null;
opt.success = opt.success || function () {};
var xmlHttp = null;
if (XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
else {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
}
var params = [];
for (var key in opt.data){
params.push(key + '=' + opt.data[key]);
}
var postData = params.join('&');
if (opt.method.toUpperCase() === 'POST') {
xmlHttp.open(opt.method, opt.url, opt.async);
xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
xmlHttp.send(postData);
}
else if (opt.method.toUpperCase() === 'GET') {
xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async);
xmlHttp.send(null);
}
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
opt.success(xmlHttp.responseText);
}
};
}
获取频道和歌曲
// 获取频道
function getChannel () {
ajax({
method: 'GET',
async: false,
url: 'http://api.jirengu.com/fm/getChannels.php',
success: function (response) {
var jsonObj = JSON.parse(response);
channelArr = jsonObj['channels'];
getRandomChannel(channelArr);
getMusic();
}
});
}
// 获取随机频道
function getRandomChannel (channelArr) {
var randomNum = Math.floor(channelArr.length * Math.random());
var randomChannel = channelArr[randomNum];
channel.innerHTML = randomChannel.name;
channel.setAttribute('data-channel-id', randomChannel.channel_id);
}
// 获取音乐
function getMusic () {
ajax({
method: 'GET',
url: 'http://api.jirengu.com/fm/getSong.php',
data: {
"channel": channel.getAttribute("data-channel-id")
},
success: function (response) {
var jsonObj = JSON.parse(response);
var songObj = jsonObj['song'][0];
songTitle.innerHTML = songObj.title;
singer.innerHTML = songObj.artist;
recordImg.src = songObj.picture;
bigBg.src = songObj.picture;
musicAudio.src = songObj.url;
musicAudio.setAttribute('data-sid', songObj.sid);
musicAudio.setAttribute('data-ssid', songObj.ssid);
musicAudio.play();
isLoading = false;
getlyric();
// 解决首次进入页面时,自动播放的兼容问题,不自动播放
if (num === 1) {
musicAudio.onplaying = function () {
this.pause();
musicAudio.onplaying = null;
};
num++;
}
}
});
}
其他的部分,可以通过下载源码来查看。
用html制作一个音乐排行榜,使用原生JavaScript制作一个漂亮的音乐播放器相关推荐
- php拼图游戏开发,原生javascript制作的拼图游戏实现方法详解
本文实例讲述了原生javascript制作的拼图游戏实现方法.分享给大家供大家参考,具体如下: 实现方法 //1.让所有的li(在ul里)可以拖拽 //2.交换li的位置 计算背景图位置 //1.让 ...
- 一个WPF开发的、界面简洁漂亮的音频播放器
今天推荐一个界面简洁.美观的.支持国际化开源音频播放器. 项目简介 这是一个基于C# + WPF开发的,界面外观简洁大方,操作体验良好的音频播放器. 支持各种音频格式,包括:MP4.WMA.OGG.F ...
- html制作顶部选项卡,html: 原生javascript实现选项卡
前言 我觉得html中一个比较实用的功能就是选项卡,选择哪一个就显示对应的内容,感觉挺舒适的.用在页面布局上也是不错的选择. 那么选项卡到底是什么的样呢?下面我们来直观的看一下,如下图所示就是一个简单 ...
- React jsx转换成原生JavaScript的一个例子
jsx代码: var React = require('react'); var ReactDOM = require('react-dom'); var MyButtonController = r ...
- 《原生javascript制作各种酷炫组件》专栏介绍
本专栏主要是用原生javascript和css来编写一些炫酷的效果,用原生写是为了读者能把代码放到任何框架当中,代码没有做封装,瀑布式的代码理解起来容易,也容易修改以便达到自己想要的效果,适合初级学者 ...
- ios计算机音乐软件,DOTEC-AUDIO 将均衡、响度和 AU 插件播放器软件移植到了 iOS
DOTEC-AUDIO将三款软件和插件制作成了iOS版本,现在你可以在苹果的APP Store上购买和下载,在iPhone或iPad上使用这些好看又好用的音频工具. AUAudioPlayer音乐播放 ...
- 音乐封面转动html,带封面的HTML5手机音频播放器
本文演示了三种不同样式的html5音频播放器,通过html5的audio标签,使其支持自定义歌名.歌手和歌词,是否自动播放,音乐封面图,播放进度等 查看演示 下载资源: 104 次 下载资源 下载积分 ...
- 使用原生JavaScript做一个简单日历
起因 突然工作方面要做一个关于选择日历区间的组件,虽然之前也做过,但是有点忘了,现在相当于用原生复习一下咯,顺便回顾一下当时的思路. 开始 先放一下最后的结果吧 (简简单单59行解决) 一开始肯定是构 ...
- 原生javascript制作svg进度球
在SVG发展到今天,已经在互联网上进行了各式各样的运用,当然也就包括进度条以及进度球的制作,制作这个类型的动画交互该如何制作呢?接下来就带大家来揭秘吧! 1. 兴趣引导 > 最终效果 - SV ...
最新文章
- 2022-2028年中国氮肥行业投资分析及前景预测报告
- 第十六届全国大学智能车竞赛华南赛区成绩汇总
- OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...
- 分块的单点修改查询区间和_模版 单点修改,区间查询
- P4922-[MtOI2018]崩坏3?非酋之战!【dp】
- 自学php【二】 PHP计算时间加一天
- display:none的表单也会被提交
- 作为技术人员,经常遇到没有接触过的技术,有时是点滴的小技能,有时可能是大的一个研究课题,那么我们如何进行技术研究呢?
- 2019年新款iPhone高清渲染视频来了 强迫症慎点...
- 解决ubuntu 20.04 打不开设置的问题
- 项目管理ppt_干货:腾讯内部项目管理PPT!
- Mac上Fortran环境搭建
- python打印九九乘法表代码
- php中文制作,php中文验证码制作教程
- 【前端】一步一步使用webpack+react+scss脚手架重构项目
- 数据结构与算法的重要性
- 第二部分 音频压缩编码
- 字节流和字符流的应用
- ERROR: ExpansionError during parsing
- 基于XMPP的IOS聊天客户端程序(IOS端二)
热门文章
- 事业单位笔试:《综合知识》大纲
- distinct mysql性能_MySQL中distinct和group by性能比较
- 彻底清除已删除的文件
- 关于Autodesk软件安装问题
- Antd table组件样式去除背景色
- “亚马逊抄袭”引热议,拼多多、淘宝、京东该怎么玩?
- 用vc对oracle数据库编程,用VC开发基于ORACLE数据库应用程序
- 金三银四的背后--软件测试工程师的求职之路
- 凸优化_Stephen_Boyd_
- O(N*logN)的排序算法