前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这个Demo比之前的可以算是进阶呢~v2.0哈哈哈~感觉截图体验很不好呢,所以在美图秀秀上面做了简易的动图,大家感受感受

正文:

老规矩,先上图~感觉有点卡,愿意等的就等等嘛,不愿意等的,往下看,有图片讲解

功能实现:

1.点击音乐列表播放音乐

2.拖动或点击进度条,调节音乐播放进度

3.浮动到音量控件上,出现音量调节器,点击或拖动可调节音量

4.点击+弹出模态对话框,添加歌曲及歌词

5.点击循环播放按钮或顺序播放,如为循环则单曲循环,若为顺序则当音乐播放完毕自动播放下一首,如当前歌曲为最后一首,自动调转到第一首播放

6.删除歌曲,若成功弹出提示成功,失败弹出提示失败

总结:

1.改进的部分

  1)之前以为播放按钮是表示的状态,结果被告知是点击之后显示另外一个按钮,以表示当前按钮被点击,谢谢科普~【大哥比哈特】

  2)进度条拉动和点击同音量调节的拉动和点击异曲同工,因为进度条不止涉及播放歌曲还有歌词的显示,所以先找软柿子捏,做了音量调节,搞了好一会儿,主要是要获取鼠标点击时的坐标,用clientX来获取老是不对,它会随着窗口大小变化,后来发现了一个好东西pageX,这个会不会随窗口变化,然后就水到渠成啦~进度条稍微多一个歌词的问题,但是因为之前把歌词的方法已经写全了,所以直接找对地方传参调用就ok~

  3)把git好好学了一下,真的真的好好用啊~向全世界安利git(不要说我土,对于菜鸟来说git确实用处不大,不像js这种是必学的程度,其实说白了就是懒【摊手】)用git来管理代码真的超棒,没用  过的小伙伴赶紧去试试吧~

2.遇到的问题

  (1)前端部分:

    1)歌词问题  之前用的原生js,后来又刷了一遍jq(源码还没刷完,我悔过),就改用jq写了,用data来绑定歌词对应的时间,这样在设置歌词样式的时候更简单些,结果!当页面不是激活状    态(如最小化时),歌词滚动就出错了。。。心塞死我了,以为是data的锅,结果不是,是jq的锅,当用js设置滚动的top时就没问题,所以大概是因为jq自己的内部机制?求知道真实原因的大神    给我科普,拜谢~

    2)bootstrap中progress-bar(进度条元素)的动画样式老是消除不了,最开始以为是元素样式匹配的优先级不够,结果把各级的div哦,id哦全加上了还是不行,郁闷死了,感觉就是和我作对    嘛,后来发现是自己瓜了(这个锅我背),要用transition-duration:0s(s不能少);来单独设置动画执行的完成时间,这个是立即完成的意思,变现出来就是没有动画效果。(在此不要动画效果    是因为,拖动进度条时有动画特别特别瓜呆,想象你已经拖到了1分钟的地方,结果后面的进度才屁颠屁颠的跟过来,看着就火大,所以必须消除!嗯!)

    3)在弹出添加歌曲歌词的摸态框那里本来想设置动画效果(bootstrap实现的是有动画效果的),但是因为我是用js来控制它的显示和隐藏,所以用了display属性,死改了半天还是没有动画效     果,宝宝心疼自己,结果发现动画的显示和隐藏是对于opacity的,对于display没法设置动画的显示隐藏,不是我的锅,开熏~

  (2)后台部分:

    1)数据库部分:

      a)这是个低级到我自己都羞愧的错误,不过就原谅我这个数据库渣渣吧,我在写插入语句的时候,改了好久,终于发现!居然是因为引号的原因,我在values后面要插入的数据部分每个都加      了‘’,当时的想法是,因为他们是字符串啊~加引号是想当然的吧,然后我就想当然的错了,我悔过。。。终于记住不在插入的数据部分加引号了,然后就又想当然的在列名的地方加了引号了,      因为他们是字符串啊~加引号是想当然的吧~【让会长来揍死我吧】

      b)数据库老是不能选择,mysql_select_db()执行的结果总是莫名就错了,后来发现锅不在它,是因为mysql_connect()我没传参,所以访问数据库的权限不够,所以取不到。要传入的参      数是'localhost'(一般都是这个),‘数据库账号’,‘密码’,这个应该是你进入mysql 的时候设置的,如果忘了,自己百度去吧~

      c)在数据库自己插入了一条测试数据,取出来的时候,中文的地方全部是????【黑人????】什么鬼??赶紧找四爷去——雍正专治八阿哥,在mysql_select_db()前面加一句         mysql_query("set names utf8")就ok了~

    2)文件上传:

      a)本来计划用$.post配合JSON传递数据的,因为异步而且不会跳转刷新页面,然而我失败了,此处再求大神分享经验,科普用JSON怎么获取到文件~尝试用JSON的时候,因为要获取文件      的路径,所以用了H5的FileReader对象,但是!搞不起,想了想,估计是因为这是本地的服,务,器,而FileReader是用于获取本地文件的,所以会在用readAsDataURL的时候返回null。       (一本正经的fu说八道,再次恳求大神出现,科普科普,有利于人民素质的提高【丽娜的闪亮小虎牙笑】)放弃JSON改用了表单,结果在改变临时文件路径,存储到指定目录下的时候,又一直      报failed to open stream: Invalid argument,这个是个什么鬼?(打开流失败:无效的参数)呃?我完全是按照W3C上面来的啊,我没手贱输入错误吧?结果发现又是,中文的锅,        (不,我美丽的方块文字才没有错,╭(╯^╰)╮)在文件名作为参数传入mb_convert_encoding()作为第一个参数,然后是'gbk',‘utf8’)ok,现在世界都清净了,一切都美好了,感觉自己又萌      萌哒~

      b)然后测试各种上传歌曲,然后删除,多添加几个试试,呃,全部一模一样的歌你全给输出来感觉就像中病毒一样好嘛???改!如果歌曲文件已经存在于指定目录,那么就提示不能重复上传      相同的歌曲,然后就装作什么都不知道的样子,又返回到摩洛哥音乐播放器页面。file_exists(filename)竭诚为您服务。如果存在返回true,不存在放回false。ok~

后话:

  学习php最大的感悟就是,后台其实没有想象中那么男,还是很娘炮的嘛,一幅小受等着被欺负的样子,所以想对像我一样怂的前端小伙伴们说,去学学php嘛,它真的很软妹的,哈哈,愉悦的学习了php,之后要搞nodeJS了,求虐我轻一点,最后的最后,周末还要加班的程序猿和攻城狮们,加油哦~撒拉黑【大哥比哈特】

用PHP+H5+Boostrap做简单的音乐播放器(进阶版)的更多相关文章

  1. 用H5+Boostrap做简单的音乐播放器

    前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是j ...

  2. 简单的音乐播放器(VS 2010 + Qt 4.8.5)

    昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...

  3. swift3.0 简单直播和简单网络音乐播放器

    本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...

  4. 基于jQuery仿QQ音乐播放器网页版代码

    基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m ...

  5. [ 原创 ]学习笔记-做一个Android音乐播放器是遇到的一些困难

    最近再做一个安卓的音乐播放器,是实验室里学长派的任务,我是在eclipse上进行开发的,由于没有android的基础,所以做起来困难重重. 首先是布局上的困难 1.layout里的控件属性不熟悉 2. ...

  6. python 开发在线音乐播放器-简易版

    在线音乐播放器,使用python的Tkinter库做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过urllib.urlopen模块打开网址,使用Json模块进行数 ...

  7. 使用Service组件实现简单的音乐播放器功能 --Android基础

    1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放.) 2.核心代码: MusicService.java: pa ...

  8. HTML5+CSS3+jquery实现简单的音乐播放器

    ...最近天热的,感觉就像煎饼...然后别人在把妹子的时候,只有偶们这帮苦逼的程序员在那边撸代码...我日哦! 然后今天晒的是偶早年写的一个播放器...看上去是不是很有感觉的样子!一番宝物,Lisa唱 ...

  9. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

随机推荐

  1. JavaScript Patterns 6.1 Classical Versus Modern Inheritance Patterns

    In Java you could do something like: Person adam = new Person(); In JavaScript you would do: var ada ...

  2. C#处理猜拳问题(非窗体)

    //猜拳,5局3胜,要求使用公用变量. namespace 结构体复习_公用变量 { class Program {public int rz=0; public int dz = 0; public ...

  3. oracle数据泵示例

    主要的导出示例: 1.导出指定表空间: expdp system/xxx DIRECTORY=dump_dir tableapace=xxx dumpfile=xxx_%DATE:~0,4%%DATE ...

  4. CSS实现自定义手型气泡提示

    实现自定义的手型气泡提示 <html> <head> <meta charset="utf-8"> <title></titl ...

  5. nginx参数说明

    一.nginx的核心配置: >>> 正常运行的必备配置: 1. user username [groupname]; #指定运行worker子进程的用户或组 2. pid /path ...

  6. C#编程普通型计算器 经验与感悟

    先贴图: 这是用C# 语言编写的普通型计算器,功能基本模仿Windows8自带计算器程序(版本6.3,内部版本9600).支持加.减.乘.除.退格.清除.平方根.倒数.相反数.连续四则.连续等号.自动 ...

  7. 最新discuz模版制作7堂课让你精通discuz模版制作

    第一课  基本知识储备一.基本 HTML 代码二.网站语言编码  三.DIV+CSS 认知及应用 第二课  必备软件.环境配置及程序安装 第三课  DISCUZ 构架详解 一.DISCUZ 基础构架讲 ...

  8. Protobuf语言指南(转)

    Protobuf语言指南 l  定义一个消息(message)类型 l  标量值类型 l  Optional 的字段及默认值 l  枚举 l  使用其他消息类型 l  嵌套类型 l  更新一个消息类型 ...

  9. 【转】最长回文子串的O(n)的Manacher算法

    Manacher算法 首先:大家都知道什么叫回文串吧,这个算法要解决的就是一个字符串中最长的回文子串有多长.这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文 ...

  10. Svn Patch 中文乱码

    关于Patch svn打patch的介绍:巧用svn create patch(打补丁)方案解决定制版需求 svn创建patch 1.在SVN的提交列表中,右键选择“创建补丁” 2.选择保存位置,保存 ...