近期完成的一个 wap手机小站 ,过后稍微总结一下。
思考
如今,angular/react/vue 的大热,使得 jquery 即将退去的形势变得更为明朗。思考一番,倘若如今摒弃了 jquery 、哪个框架会更合适自己目前的项目呢?
当下的这个wap手机小站,大量的ajax数据进行前后交互,这不就是 SPA 单页面应用的趋势么?结合近期正在学到的 react-router
,觉得到时有必要将该 wap手机小站 用react来重构一下,为学习探索之用。
在这之前,还是先对当下这个刚完成的wap手机小站总结一下吧:
基本目录
|
|
gulp
构建工具gulp主要用到的模块:
|
|
一些说明:
gulp-changed:在设置watch的task任务时,往往监视的是一个目录下的所有js/css文件;当该目录下的其中一个js/css被修改并保存后,会触发该目录下所有的js/css文件进行处理。
gulp-changed 可以实现仅仅传递更改过的文件进入pipe();
但是在sass编译的时候,.scss
文件 -> .css
文件,本身就已经发生了变化,因此还是会把该目录下的所有 .scss
文件进行了处理。暂且只能尽量把css分类别分目录进行监视,以减少那些未改动过不必要的处理。
gulp-rev-append:当html文件中的js/css引入写法是绝对路径的时候,gulp-rev-append
失效、不能即时改变url后面的版本号。如:
|
|
require.js
require.js 模块化js,js文件的模块化。
js的模块化主要有两方面:
- 外部引用的一些jquery插件功能模块(如:jquery,echo,swiper等)
- 自身定义的常用公共组件模块( myModule 里面一般是需求所需最适合自己的自定义功能模块,如一些正则、弹窗组件、cookie、客户端判断等等)
eg:
|
|
js 面向对象
js 面向对象模块化js,js 文件里 代码段的模块化。
php 后台仅是把所有数据通过ajax接口扔给web前端,如何对数据进行处理、将其呈现在页面上,都是前端 zepto/jquery 的工作了。如此以来,js的代码量大幅增加。再加上 jquery无穷回调噩梦,所带来的难题雪上加霜。
js 代码段的面向对象的小模块化可以一定程度地破解这事。如:
|
|
ajax/json/jsonp
页面数据基本全是通过 jsonp 发给前端然后呈现在页面上;大量的数据和dom处理,对于 $.ajax()
的成功回调函数 success: function(){}
将会是一个噩梦;幸亏前面的 js面向对象写法、使得js代码块有了模块化,有效梳理清晰了代码功能之间的条理。
大量的ajax,自然就有了后台提供的大量的数据接口;某天那位后台说要改个接口,那还不得大面积满js页面地一个个修改?
踩过这样的坑,后来干脆把所有接口也放在一个公共js文件中:
|
|
大量的ajax数据,html的js组装:
|
|
sass/rem/emmet/cssrem
gulp插件 gulp-sourcemaps
将压缩过的 js/css文件 映射到对应的尚未压缩过的 js/sass 文件,在调试中快速定位代码的位置、进行高效调试。sass
嵌套带来的一个调试问题:css/sass 的行数定位、一般是定位到元素前的,比如:
|
|
以上代码中,假如我们要快速定位到设置 .child
的 width 值的第四行,但是 gulp-sourcemaps
为我们定位到的只是 .parent
处的第一行。
当嵌套过深时,定位的偏差就会越大。适度的嵌套可以既保持css的模块、又可方便调试的快速定位;一般一个小组件为一个嵌套的css块。
移动端的自适应摒弃了百分比的方式,采用了 rem 自适应做法(移动前端适配)。
rem 与 px 的转换,写一个就自己计算一遍么?如此效率不能忍。
sublime 插件 cssrem/rem-unit均可实现 rem 与 px 自动转换。配置插件中 font-size 值为 40,然后你只管按照ui设计图的大小敲出px大小,cssrem/rem-unit 便会自动进行转换。
sublime 另一个插件 emmet,在写 html 时候会让人有飞一般的感觉。详见 emmet语法
工具
fiddler、photoshop、fastStoneCapture、apache、chrome、postman、svn、git bash、sublime plugins、phpStorm 等
fiddler:将线上的 js/css 静态文件代理为本地对应的文件,堪称一绝;
apache: 开个本机的服务器,手机代理到电脑,真机测试(nginx也行);
git bash:主要用来执行 gulp 任务。
一些坑
- cookie、localStrage在微信浏览器的坑;
- 移动端的静态文件的缓存,gulp插件MD5版本号在绝对路径下的失效;
- 标签的href链接,跳转不到苹果的 appstore;
- 图片验证码在 mac/safari 一直填写不正确;
- 字体图标替换png;
- 弹窗填写表单的坑处理;
- 删除重复绑定的事件:
|
|
- 移动端实时监听输入框值变化:
|
|
- require.js 的 baseUrl 路径问题;
- 等等。