每次写文章时,总会以为比写代码难多了,可能这就是我表述方面的不足吧,然而写文章也是能够复盘一下本身的开发过程,对本身仍是受益良多的。在这里简单叙述一下我仿某鱼部分布局以及功能实现的过程,仅作学习用途。css
Vue是一套用于构建用户界面的渐进式框架,Vue 的核心库只关注视图层,不只易于上手,还便于与第三方库或既有项目整合。另外一方面,当与现代化的工具链以及各类支持类库结合使用时,Vue 也彻底可以为复杂的SPA单页面应用提供驱动。html
搜索vue
分类html5
登陆ios
购买git
发布github
● ┣━ src # 开发目录 ┣━ api //axios获取假数据的统一js ┣━ data.js ┣━ assets //静态文件资源 ┣━ images //图片 ┣━ utils //通用js方法函数 ┣━ common //通用的文件资源 ┣━ stylus //stylus文件夹 ┣━ component //可复用的组件 ┣━... ┣━... ┣━... ┣━... ┣━... ┣━... ┣━ pages //页面(页面组件) ┣━... ┣━... ┣━... ┣━... ┣━... ┣━... ┣━ router //路由 ┣━ index.js ┣━ store //vuex数据状态管理 ┣━ index.js ┣━ state.js ┣━ mutations.js ┣━ actions.js ┣━ getters.js ┣━ App.vue //根组件 ┗━ main.js
用户在已登陆状态和未登陆状态的界面是不一样的,有些功能指定要在登陆状态下才会有,所以会产生状态的切换,咱们能够经过浏览器自带的window.localStorage来存储数据,也能够用vuex,若是状态多的状况下建议采用vuexweb
这个没什么好说的,利用indexOf这个方法来验证假数据中是否有这个key,相应输出它的value,没有那就切换另外一个找不到的UI界面vue-router
这个也没有什么难度,取到假数据中的数据来for in循环输出,而后用better-scroll插件来实现滚动对应的高度效果vuex
若是是在未登陆的状态下,那么进行一个router-link路由跳转到登陆login页面,若是是已登陆的状态下,会进入到一个商品详情页,点击我想要会进入到一个与卖家聊天交互的一个界面,这里面的卖家的数据都是模拟出来的假数据,所以它不能像真的卖家同样。其中每个表情emoji就是一个图片,用code的方式把它编译出来再进行一个swiper轮播来包裹他们的遍历循环。
接着点击当即购买则会跳到付款页面,若是填过地址等信息的,那么能够选择,若是未填的,则会引导至输入相关信息页面,再点击购买就成功了,这个时候数据就会利用vuex保存到个人我的页面中的我买到的页面中。能够进行确认收货后删除订单。
同样,只有在已登陆的状态下才能够进入到发布的界面,发布就是充当着一个卖家的身份,须要填写商品详情的相关信息包括图片,价格等。经过验证才可发布成功,一样利用了vuex来保存发布的商品信息,再跳至个人页面中的我发布的页面进行数据输出。
我是用rem来实现的,也建议用rem来自适应布局,先本身封装一个自适应html的 font-size的js,再将其导入到main.js中
/** * Created by zhaolele on 2018/7/25. */ (function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function() { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 32 * (clientWidth / 320) + 'px'; }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); //10rem
众所周知,移动端因不一样的设备的分辨率致使一像素并非真正的统一的一像素,所以咱们须要封装一个stylus的mixin来引入
border-1px($color) position: relative &:after display: block position: absolute left: 0 bottom: 0 width: 100% border-top: 1px solid $color content: ' ' @media (-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5) .border-1px &::after -webkit-transform: scaleY(0.7) transform: scaleY(0.7) @media (-webkit-min-device-pixel-ratio: 2),(min-device-pixel-ratio: 2) .border-1px &::after -webkit-transform: scaleY(0.5) transform: scaleY(0.5)
可使用input中type的file属性,而后用html5的新属性hidden来隐藏掉这个节点,经过点击其余的节点来触发这个input type=file的点击事件,再利用lrz的图片压缩将图片优美的输出到也页面中。拿里面的上传头像的代码贴一下。
html: <div class="avatar" @click="addPic"> <img :src="url" alt=""> <span class="upavatar">上传帅照</span> <input type="file" hidden accept="image/jpeg,image/jpg,image/png" capture="camera" @change="fileInput" ref="file"> </div> js 方法: addPic() { this.$refs.file.click() }, //点击触发fileInput事件 fileInput(e) { let files = e.target.files console.log(files) if(!files.length) return this.createImage(files, e) }, createImage(files, e) { lrz(files[0], { width: 480 }).then(rst=> { this.url = rst.base64 }).catch(err=> { console.log(err) }).always(()=> { e.tartget.value = null }) },
**不少东西细节想聊出来,好比嵌套路由所踩的坑..等,可是最近忙于找工做,时间问题就写到这里,有兴趣或者正在学习vue的同窗能够查看个人github源码。fallow-fish若是对你有帮助,能够star个人项目给我一点点的鼓励,也但愿有志同道和的能够加入一块儿讨论,我也会第一时间帮你解答。**