vue.js移動(dòng)端app實(shí)戰(zhàn)1:初始配置詳解
本系列將會(huì)用vue.js2制作一個(gè)移動(dòng)端的webapp單頁面,頁面不多,大概在7,8個(gè)左右,不過麻雀雖小,五臟俱全,常用的效果如輪播圖,下拉刷新,上拉加載,圖片懶加載都會(huì)用到。css方面也會(huì)有一些描述,像不同分辨率的適配,flex布局以及scss來編寫mixin來處理2x,3x圖等。
初始工作:
通過vue-cli安裝webpack模板后,會(huì)自動(dòng)生成一大堆文件,通常我們只關(guān)心src/目錄下的東西。
個(gè)人習(xí)慣在src下新建一個(gè)base目錄,用來存放通用的css及js,比如樣式重置css,一切js工具函數(shù)。
下載好文件后,npm run dev
啟動(dòng)服務(wù)你就會(huì)看到熟悉的hello vue。由于我們做的是移動(dòng)端的頁面,所以把chrome切換到手機(jī)模式(打開開發(fā)工具,ctrl+shift+m或者點(diǎn)左上角那個(gè)手機(jī))
對于移動(dòng)端如何適配不同的手機(jī)屏幕,估計(jì)每個(gè)人都有自己的做法,我用的是淘寶的flexible.js,根據(jù)不同類型來縮放以及調(diào)整html字體的大小,用rem來布局。使用的方法也很簡單,只需要引入Js文件就可以了,github地址。
這里簡單介紹一下如何計(jì)算rem
:
假如設(shè)計(jì)稿為640,有一個(gè)div寬200px,則css應(yīng)該為width:(200/640)*10=3.125rem
假如設(shè)計(jì)稿為750,有一個(gè)div寬200px,則css應(yīng)該為width:(200/750)*10=2.666rem
可以發(fā)現(xiàn)如果每次量好一個(gè)DIV寬后都要用一個(gè)計(jì)算器算一遍,那這速度也太慢了。
假如你用的是scss,那么可以編寫一個(gè)函數(shù)來處理(函數(shù)下面的75px來自設(shè)計(jì)稿大小,假如設(shè)計(jì)稿為750,則為75;)
@function torem($px) { @return $px / 75px * 1rem; }
假如你用的sublime編輯器,可以到https://github.com/flashlizi/cssrem 下載一個(gè)插件,寫起來更方便;
字體的處理:
字體方面我們?nèi)匀挥胮x來寫,不過需要針對不同的縮放比例寫不用的大小,比如安卓下,字體大小為14px,那么iphone6下大小應(yīng)為28,Iphone6s應(yīng)為42px。flexible.js會(huì)根據(jù)屏幕縮放比給html添加data-dpr屬性,因此可以通過scss編寫mixin來處理字體
@mixin fz($font-size) { font-size: $font-size; [data-dpr="2"] & { font-size: $font-size * 2; } [data-dpr="3"] & { font-size: $font-size * 3; } }
需要用到字體的地方,@include fz(16px);
圖片的處理:
通常為了適應(yīng)retain和非retain屏幕,我們會(huì)準(zhǔn)備不同的圖片大小,也就是2x和3x圖,我的做法是[data-dpr="3"]下使用3x圖,其他情況統(tǒng)一使用2X圖。
在為了方便,編寫一個(gè)mixin來處理:(假設(shè)放在2x文件夾和3x文件夾下)
@mixin dpr-img($url,$name,$type:".jpg"){ background-image: url($url+"2x/"+ $name+"@2x"+$type); [data-dpr="3"] &{ background-image: url($url+"3x/"+ $name+"@3x"+$type); } }
第一個(gè)參數(shù)為2x,3x文件夾所在路徑,第二個(gè)參數(shù)為文件名,第三個(gè)參數(shù)為文件類型,默認(rèn)為.jpg結(jié)尾。
寫CSS時(shí)有些代碼塊可能會(huì)經(jīng)常用到,因此也可以寫成mixin,比如單行文本溢出和多行文本溢出
:
@mixin t-overflow($line:1) { @if $line==1 { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } @else { display: -webkit-box; -webkit-line-clamp: $line; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } }
比如左右垂直居中
:
@mixin table-center { display: table-cell; vertical-align: middle; text-align: center; } @mixin flex-center { display: flex; justify-content: center; align-items: center; }
字體圖標(biāo)的處理:
頁面通常都會(huì)有很多小圖標(biāo),為了減少請求以前可能會(huì)用雪碧圖來合并,不過我現(xiàn)在基本不用了,用字體圖標(biāo)來代替。我用的是阿里的在線字體圖標(biāo),上傳svg到阿里字體庫或者直接使用阿里的圖標(biāo),選中圖標(biāo)后添加到項(xiàng)目,生成地址后,import到項(xiàng)目中就可已使用了。
在App.vue中:
@import url('//at.alicdn.com/t/font_nfzwlroyg2vuz0k9.css');
編寫main組件:
頁面上底部有4個(gè)tab,點(diǎn)擊時(shí)會(huì)切換對應(yīng)的組件,所以Main組件的結(jié)構(gòu)是這樣的
<template> <div> <router-view></router-view> <foot-nav></foot-nav> </div> </template>
foot-nav底部導(dǎo)航的布局如下:
<template> <div class="foot-nav-containner"> <ul class="bottom-nav"> <router-link tag="li" to='/index' class="bottom-nav__li iconfont icon-shouye bottom-nav__li--home"></router-link> <router-link tag="li" to='/search' class="bottom-nav__li iconfont icon-ss bottom-nav__li--search"></router-link> <router-link tag="li" to='/car' class="bottom-nav__li iconfont icon-shoppingcart bottom-nav__li--car"></router-link> <router-link tag="li" to='/vip' class="bottom-nav__li iconfont icon-gerenzhongxinxia bottom-nav__li--vip"></router-link> </ul> </div> </template>
點(diǎn)擊底部每個(gè)導(dǎo)航,導(dǎo)航上面的組件都會(huì)相應(yīng)的替換。不過要注意點(diǎn)擊購物車時(shí),購物車頁面底部需要有去結(jié)算按鈕,所以購物車頁面是沒有導(dǎo)航的,也就是說購物車的路由配置時(shí)不會(huì)放在mian路由的children下面。
編寫路由:
{ path:'/', redirect:"/home" }, { path:'/home', component:Main, children:[ { path:'/', redirect:"/index" }, { path:'/index', component:Index }, { path:'/search', component:Search }, { path:'/vip', component:Vip } ] }, { path:'/car', component:Car }
我們把home路由設(shè)置為默認(rèn)路由,當(dāng)路由為空時(shí),就會(huì)重定向到home路由,home路由下又把index路由設(shè)置為默認(rèn)路由。我們把car設(shè)為單獨(dú)的路由而不是home下,因此點(diǎn)擊導(dǎo)航的購物車時(shí)就會(huì)從home路由切換到car路由,而由于底部的路由是放置在home路由下,所以到了購物車頁面導(dǎo)航也就不存在了,這樣基本的配置就差不多完成了。
本節(jié)先把基本的結(jié)構(gòu)搭建起來,后續(xù)才開始進(jìn)入每個(gè)頁面內(nèi)容的編寫。
目前已經(jīng)寫好幾個(gè)頁面,項(xiàng)目已上傳到github,地址https://github.com/linrunzheng/vueApp
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue-router結(jié)合transition實(shí)現(xiàn)app前進(jìn)后退動(dòng)畫切換效果的實(shí)例
- vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)
- vue中appear的用法
- 詳解基于vue的移動(dòng)web app頁面緩存解決方案
- vue-router實(shí)現(xiàn)webApp切換頁面動(dòng)畫效果代碼
- vue實(shí)現(xiàn)app頁面切換動(dòng)畫效果實(shí)例
- 巧用Vue.js+Vuex制作專門收藏微信公眾號(hào)的app
- vue2手機(jī)APP項(xiàng)目添加開屏廣告或者閃屏廣告
相關(guān)文章
Vue 實(shí)時(shí)監(jiān)聽窗口變化 windowresize的兩種方法
這篇文章主要介紹了Vue 實(shí)時(shí)監(jiān)聽窗口變化 windowresize的兩種方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Vue實(shí)施重新發(fā)布和軟件熱更新的經(jīng)驗(yàn)分享
在Web應(yīng)用的開發(fā)周期中,版本管理和軟件熱更新是一個(gè)不可或缺的話題,隨著Vue.js框架的流行,越來越多的應(yīng)用程序選擇使用Vue來構(gòu)建前端,本文將探討在Vue應(yīng)用中實(shí)施重新發(fā)布和熱更新的最佳實(shí)踐,需要的朋友可以參考下2024-09-09Vue?打包優(yōu)化之externals抽離公共的第三方庫詳解
這篇文章主要為大家介紹了Vue?打包優(yōu)化之externals抽離公共的第三方庫詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-06-06vue element-ui實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了vue element-ui實(shí)現(xiàn)動(dòng)態(tài)面包屑導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12