linxner / music-app

imitate QQmusic App

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

music-app

A Vue.js project

介绍

#其实就是一个Web,没有App的外壳,只有内部的HTML,对所有手机端做了适配,是我的阶段性学习检验成果项目,基本实现QQ音乐的歌手及播放功能,以下介绍一下我的构建思路及学习心得。

环境搭建

#vue-cli全家桶,个人不建议引入jQuery,加大了内存,DOM操作也不符合vue的数据驱动的理念,vue-router+vuex+axios基本搞定,但这边我用的是Ajax,webpack打包时shaking掉其他跟Ajax无关的代码就行。

布局

#全部都是flex布局,相对于浮动+定位,flex布局的适配可能会比较方便和稳定,但我写下了发现多了比较多的多余标签(用来将子元素分块),不过只要将布局细化,将每个部分想成一个包一个的方块,然后再开始代码,这真的是很重要,一边写一边布局,之后你会花大量时间去调整。这边用了Element-UI的一些样式模板,个人比较喜欢他们的颜色,所以给我自己写的换了个皮肤,有些地方不是很满意,修改了一些源码。CSS编译用的Less,样式也可以模块化,样式也有“全局变量”。

动效

#Vue中自带了transition标签,简直不要太好用,这边还用到了better-scroll框架,阻止浏览器默认滚动,实现滑动缓动,使体验更加真实。

数据

#把所用到的量都取个名字,变量用小写,常量用大写,用let/const取代var,优先使用const,就不用担心全局变量污染了。需要操作的数据放在data中,接受props参数写成对象形式,声明一下数据类型,放个默认值防止报错会更好。数据驱动,明确你的数据是控制哪个部分的视图,取名字是最好的方法,只操作数据,尽量不要操作DOM。简单的数据传输使用props和$emit,复杂或者频繁的数据传输使用vuex,将数据集中管理,到哪都能用,想改即改。

模块

#将可复用方法进行面向对象封装放在独立的文件中,需要时再引入,实现代码高内聚,低耦合,结构更合理,可维护性更高,便于管理。

组件

#一个可复用组件要明确想要传入什么值来改变视图层,用props定义你需要的数据,取语义明确的名字,声明数据类型,可以简单处理一下数据,方便团队合作开发,使组件可让整个团队使用。组件需要插入HTML可用slot标签,注意,组件开发出来不是你自己用。

优化

#很多性能优化其实vue-cli已经帮我们做好了,我们需要在编写js时做到 一些细节上的优化,比如DOM操作先缓存,DOM查找是需要循环遍历整个页面的标签的,如果不缓存将使得每操作一次即遍历一次页面,非常耗性能。不再需要的对象手动清除,设置为null。for循环将长度用变量先保存起来等等,都能提高浏览器的性能。

For a detailed explanation on how things work, check out the guide and docs for vue-loader.

About

imitate QQmusic App


Languages

Language:Vue 49.6%Language:JavaScript 33.3%Language:HTML 11.5%Language:CSS 5.7%