All Projects → zoyopo → Mobile Music

zoyopo / Mobile Music

网易云音乐接口+vue全家桶开发一款移动端音乐webApp

Labels

Projects that are alternatives of or similar to Mobile Music

Pretty Vendor
[零食商贩] - 基于vue全家桶 + koa2 + sequelize + mysql 搭建的移动商城应用
Stars: ✭ 57 (-21.92%)
Mutual labels:  vue2
Laravel Vue Tasks
📝 Task app built with Laravel 5.5 and Vue 2
Stars: ✭ 66 (-9.59%)
Mutual labels:  vue2
Tsadmin
asp.net web api 2 + vue.js +elementui 实现的前/后端分离的后台管理系统框架示例程序。
Stars: ✭ 70 (-4.11%)
Mutual labels:  vue2
Vue Music
使用vue2.0构建音乐播放器
Stars: ✭ 60 (-17.81%)
Mutual labels:  vue2
Vue Cnode
基于vue2 + vue-router + vuet + ES6 + less + flex.css重写vue版cnode社区,使用webpack2打包
Stars: ✭ 1,134 (+1453.42%)
Mutual labels:  vue2
Vee Validate
✅ Form Validation for Vue.js
Stars: ✭ 8,820 (+11982.19%)
Mutual labels:  vue2
Vue Vscode Snippets
These snippets were built to supercharge my workflow in the most seamless manner possible.
Stars: ✭ 1,083 (+1383.56%)
Mutual labels:  vue2
Docker Nuxt
Docker image to run NUXT.js application in production mode
Stars: ✭ 71 (-2.74%)
Mutual labels:  vue2
Vue Admin
基于Vue2、element ui、vue-cli、vuex、vue-router、axios 、echarts后台管理系统demo. 权限管理,用户管理,菜单管理。无限级菜单,下拉树形选择框
Stars: ✭ 1,135 (+1454.79%)
Mutual labels:  vue2
Vue Tutorial
vue2.0-tutorial
Stars: ✭ 1,165 (+1495.89%)
Mutual labels:  vue2
Stf Vue Select
stf vue select - most flexible and customized select
Stars: ✭ 61 (-16.44%)
Mutual labels:  vue2
Vue Login
vue2 express register login
Stars: ✭ 61 (-16.44%)
Mutual labels:  vue2
Vue2.0 Taopiaopiao
vue2.0+router+vuex+express 构建淘票票的全栈demo
Stars: ✭ 1,152 (+1478.08%)
Mutual labels:  vue2
Region Picker
A region picker based on Vue and ElementUI.
Stars: ✭ 59 (-19.18%)
Mutual labels:  vue2
Electron Vue Webpack
A minimal Electron + Vue 2 + Webpack 2 setup for quick development.
Stars: ✭ 70 (-4.11%)
Mutual labels:  vue2
Vue Aplayer
🍰 Easy-to-use music player for Vue 2.x
Stars: ✭ 1,087 (+1389.04%)
Mutual labels:  vue2
Muse Ui
Material Design UI library for Vuejs 2.0
Stars: ✭ 8,302 (+11272.6%)
Mutual labels:  vue2
Aspnetcore Vue Starter
*NEW* Asp.net Core & Vue.js (ES6) SPA Starter kit - Vuex, webpack, Web API, Docker, and more! By @TrilonIO
Stars: ✭ 1,182 (+1519.18%)
Mutual labels:  vue2
Vue Builder Webpack Plugin
Webpack plugin to build vue files automatically
Stars: ✭ 70 (-4.11%)
Mutual labels:  vue2
Cd It Job
针对成都IT小伙伴们的工作(招聘,求职)交流的微信订阅号项目。
Stars: ✭ 68 (-6.85%)
Mutual labels:  vue2

运行

 git clone [email protected]:godlikedeveloper/mobile-music.git

 npm install

 npm run dev

项目介绍😊

网易云音乐接口+vue全家桶开发一款移动端音乐webApp

项目还在develop中,感兴趣想要参与的小伙伴可以私我

效果图:

骨架屏
首页
侧边栏
每日推荐
歌单
播放器(小)
播放器(大)

问题

骨架屏移除未渲染完全问题

描述: 2018-09-13 骨架屏被移除之后,客户端渲染还没有完成,故将骨架屏作为占位放入客户端还没渲染完成的内容中

解决:将骨架屏封装成一个子组件,在需要的父组件里引用,在每一个渲染数据页面的updated钩子里,this.$nextTick里将骨架屏幕的隐藏,原页面内容显示,由于用到的页面现在且将来可能比较普遍,就直接用注册全局mixin 来实现这个逻辑。

vue2.5+版本导致 $nextTick无法正常在 safari中播放音乐。

描述: 2018-09-15 vue2.5+版本对于$nextTick的实现的有一些改动,引入了setImmediateMessageChannel采用向下兼容的方式代替setTimeout,详情见 issues

解决:hack方式,将setImmediateMessageChannelvue.js加载前设为null,降级到setTimeOut

滚动比较生硬,性能不是很好

描述:2018-09-15 滚动比较生硬,性能不是很好

解决:使用better-scroll对涉及到滚动的统一优化,在updated钩子里对dom进行包装。

ios端播放器暂停了cd还在旋转

描述:2018-09-16 ios端播放器暂停了cd还在旋转,ios端animation-play-state失效导致无法停止动画

解决:采用其他方式,segmentFault上的一个思路 简单说就是停止的时候给外层一个transform来记录当前旋转位置信息,然后通过外层的旋转来叠加覆盖

主页面首次加载时,会出现loading时主页面划过的情况

描述: 2018-10-10 App.vue中"" vue在创建created时期,DOM从生产的时候带有slide的效果属性

解决: 通过animate.css中enter-active-class的属性进行设置,created时DOM的class为空,mounted时期添加效果

主页面滚动之后,需要点击两次才会进入歌单详情

描述: 2018-10-10 添加 better-scroll 后, 通过回弹动画延迟时间加长,发现回弹时click为无效(即使click: true也无效)

解决: better-scroll设置中的bounceTime减少回弹的时间

播放暂停时,cd旋转停止,上下曲时,播放,cd不转动

解决:在上下一曲时加上旋转的样式

滚动比较生硬,性能不是很好

描述:2018-09-15 滚动比较生硬,性能不是很好

解决:使用better-scroll对涉及到滚动的统一优化,在updated钩子里对dom进行包装。

ios端播放器暂停了cd还在旋转

描述:2018-09-16 ios端播放器暂停了cd还在旋转,ios端animation-play-state失效导致无法停止动画

解决:采用其他方式,segmentFault上的一个思路 简单说就是停止的时候给外层一个transform来记录当前旋转位置信息,然后通过外层的旋转来叠加覆盖

详细信息

测试地址

开发总结

项目结构

vue-cli搭建

新增目录如下:

  ---src
  ------api        // 放置api的目录
  ---------base.js // 放置axios的一些配置,接口域名地址,以及公共参数配置,与后台约定跨域的配置,全局loading配置等
  ---------urls.js // 放置接口url
  ---------api.js  // 放置封装的promise请求
  ------base       // 放置一些基础组件
  ------common
  ---------js      // 公共js
  ---------sass    // 公共样式

类库使用

  • fastclick解决移动端300ms延迟

  • vux 快速构建一些常规页面

  • vue-lazyLoad 对图片进行懒加载处理

  • better-scroll 轮播图

  • NeteaseCloudMusicApi wy音乐接口,node封装转发,部署在自己服务器上

路由按需加载

 const view = (path, name) => () => import(`@/components/${path}${name}`)// 路由按需加载
 //这边用的是vue异步组件的方式实现路由的按需加载
 new Vue({
   // ...
   components: {
     'my-component': () => import('./my-async-component')
   }
 })

  • 路由加载时用了transition动画组件添加了一个切换动画
  • 注意如果你希望在 Vue Router 的路由组件中使用上述语法的话,你必须使用 Vue Router 2.4.0+ 版本。

播放器组件

大小播放器分别写了MiniPlayer.vueNormalPlayer.vue两个组件,因为想要职责单一,就没有放在一起

  • 隐藏显示 通过vuex进行管理

  • 动画

    1. 头部下坠和底部的上浮

       <transition name="example">
      
      </transition>
      
      /*css 样式*/
      // 给 transition下第一个元素显示或隐藏时添加的样式
       //这两个类名都是定义开始到结束的持续时间 方式 以及延迟
      .example-enter-active{
        transition:all 0.4s linear  对所有属性执行0.4s的动画 匀速
      }
      .example-leave-active{
        transition:all 0.4s linear  对所有属性执行0.4s的动画 匀速
      }
      // 进入过度的开始状态 触发时机 元素被插入前 插入后下一帧移除
      .example-enter{
      
      
      }
      // 离开过度的结束状态 触发时机 example-leave下一帧  动画过度完成被移除
      .example-leave-to{
      
      
      }
      
       可以使用碟中谍6中的halo跳伞来理解
      
       .example-enter-active就是从飞机上离开到开伞的时间
      
       .example-enter 下坠前在飞机上的最后一刻
      
       .example-enter-to  开始下坠,具备加速度的那一刻
      
       .example-leave-active 开伞到着陆的时间
      
       .example-leave 开伞命令发出时
      
       .example-leave-to 伞开下一刻
      
    2. 播放器的cd的位移及缩放

      先计算出小播放器图片离最终大播放器cd的x,y轴上的距离

      使用 create-keyframe-animation 进行一个css3动画状态的注册

      再利用transition的动画方法钩子

      enterrun动画,afterEnter时清除动画 leave同理

    3. 播放器的旋转

      定义一个旋转的css动画,在一个class中进行调用,在play的状态下给它addClss,pause时加上animation-play-state: paused

audio的使用

使用html5audio结合vuex来进行播放器功能的实现,包括进度条,播放,暂停,上一曲,下一曲,播放模式等

布局

  • 绝大多数使用了flex webpack中配置低版本安卓,ios加前缀

  • 考虑到fixed元素的移动端问题,在这种场景下,使用100%高度+absolute方案更适合

  • 使用媒体查询,兼容一下某些样式在768px以上的样式变形

  • 使用rem 在vue实例的mounted的钩子里注册resizeonload监听,进行最外层rem基准的计算

  • 使用骨架屏进行加载资源白屏时填充,待优化至完全的主页面服务端渲染

感谢😊

  • vue

  • vuex

  • vue-router

  • vux

  • vue-lazyLoad

  • NeteaseCloudMusicApi

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].