仿2020青桔單車微信小程序之(zhī)首頁框架布局
發表時(shí)間:2021-1-11
發布人(rén):融晨科技
浏覽次數:111
接觸微信小程序也(yě)有一段時(shí)間了(le/liǎo),爲(wéi / wèi)了(le/liǎo)挑戰下自己吧,于(yú)是(shì)決定試着仿一個(gè)微信小程序,并且決定把它寫成文章發表出(chū)來(lái),同大(dà)家一起學習交流,會試着一直更新,直到(dào)把小程序寫完,寫的(de)不(bù)好或者需要(yào / yāo)改進的(de),歡迎大(dà)家指出(chū)來(lái)一起交流進步。今天要(yào / yāo)跟大(dà)家分享的(de)是(shì)青桔單車首頁的(de)框架布局。
布局思路
觀察原圖
首先來(lái)看一下官方小程序的(de)首頁圖
- 整個(gè)頁面爲(wéi / wèi)上(shàng)下布局
- 最頂部的(de)導航欄沒有采用小程序自帶的(de)默認樣式
- 整個(gè)頁面左右兩邊離外邊距存在(zài)相同的(de)間距,中下一部分有相同的(de)背景色
- 部分區域存在(zài)相同的(de)樣式
布局
有了(le/liǎo)以(yǐ)上(shàng)的(de)觀察,在(zài)結合這(zhè)個(gè)小程序的(de)其他(tā)頁面的(de)情況,我決定将這(zhè)個(gè)頁面切爲(wéi / wèi)的(de)六部分,而(ér)功能欄和(hé / huò)活動中心欄又可用一個(gè)大(dà)盒子(zǐ)裝起來(lái),因爲(wéi / wèi)它們的(de)背景色和(hé / huò)外邊距相同

實現
頂部導航欄
官方的(de)單車小程序衆多頁面的(de)頂部導航欄内容樣式大(dà)概分爲(wéi / wèi)兩種,一種是(shì)首頁的(de)這(zhè)種導航欄不(bù)帶返回按鈕,還有一種是(shì)如下圖這(zhè)種帶返回按鈕導航欄,還需考慮的(de)就(jiù)是(shì)導航欄背景顔色的(de)不(bù)同。

{
"usingComponents": {
"topNav": "../../components/topNav/topNav"
},
}
複制代碼
之(zhī)後就(jiù)是(shì)如何是(shì)編寫我們的(de)topNav組件了(le/liǎo)。 首先我們要(yào / yāo)知道(dào)頂部的(de)導航欄可被細分爲(wéi / wèi)最上(shàng)面顯示時(shí)間的(de)狀态欄和(hé / huò)與膠囊按鈕在(zài)同一層次的(de)内容欄
狀态欄的(de)高度(statusBarHeight)可根據微信小程序自帶的(de)api wx.getStorageSync() 取得并且所有品牌的(de)手機都是(shì)一樣的(de),内容欄的(de)高度(navBarHeight 自定義的(de)變量)會因爲(wéi / wèi)手機品牌的(de)不(bù)同而(ér)不(bù)同,不(bù)過一般也(yě)将其分爲(wéi / wèi)安卓和(hé / huò)蘋果兩大(dà)類,蘋果的(de)一般爲(wéi / wèi)48px,安卓的(de)爲(wéi / wèi)44px,至于(yú)手機型号也(yě)可以(yǐ)根據上(shàng)述的(de)api來(lái)取得,所有我們可以(yǐ)在(zài)全局定義一個(gè)用戶的(de)對象來(lái)專門存儲與用戶有關的(de)信息,然後把高度存入其中,方便之(zhī)後的(de)調用
wx.user = {} // 新建一個(gè)用戶對象用來(lái)存儲用戶的(de)基本信息
let info = wx.getSystemInfoSync()//獲取用戶系統信息
// console.log(info) // 可打印出(chū)來(lái)
wx.user.statusBarHeight = info.statusBarHeight // 獲取狀态欄高度
if(info.platform === 'android'){ // 判斷機型來(lái)設置内容欄高度
wx.user.navBarHeight = 48
}else{
wx.user.navBarHeight = 44
}
複制代碼
接着來(lái)寫topNav的(de)wxml結構,這(zhè)個(gè)結構就(jiù)比較簡單了(le/liǎo),我簡單說(shuō)下思路,首先在(zài)最外面布局一個(gè)view來(lái)裝所有的(de)内容,然後再在(zài)這(zhè)個(gè)view裏放置兩個(gè)同級的(de)盒子(zǐ),一個(gè)用來(lái)裝整個(gè)的(de)頂部導航欄内容,一個(gè)用來(lái) 占位使用 ,之(zhī)所以(yǐ)需要(yào / yāo)這(zhè)麽一個(gè)占位塊,是(shì)因爲(wéi / wèi)我們頂部導航欄要(yào / yāo)使用固定定位使其始終固定在(zài)頁面的(de)頂部,而(ér)使用定位會使其脫離文檔流,導緻後面的(de)dom結構往前頂,于(yú)是(shì)使用這(zhè)麽一個(gè)占位塊來(lái)占用它的(de)位置,消除對後面dom結構的(de)影響。裝整個(gè)的(de)頂部導航欄内容的(de)盒子(zǐ)裏面再放入兩個(gè)view分别來(lái)裝狀态欄和(hé / huò)内容欄,大(dà)緻就(jiù)是(shì)這(zhè)樣
<view>
<!-- 占位塊,頂替脫離文檔流的(de)頂部導航欄 -->
<view style="height:{{topHeight}}px">
</view>
<view class="container" style="background-color:{{backgroundColor}}">
<!-- 狀态欄 -->
<view style="height:{{statusBarHeight}}px"></view>
<!-- 内容欄 -->
<view wx:if="{{isIncludingisReturn}}" class="two" style="{{navBarStyle}}">
<image src="http://www.wxapp-union.com/image/左箭頭.png"/>
{{content}}
</view>
<view wx:else style="{{navBarStyle}}">{{content}}</view>
</view>
</view>
複制代碼
因爲(wéi / wèi)頂部導航欄樣式分爲(wéi / wèi)帶不(bù)帶返回按鈕,所有我幹脆自定義一個(gè)可通過父組件傳過來(lái) 類型爲(wéi / wèi)boolean的(de)變量 "isIncludingisReturn" ,再在(zài)dom結構使用 wx:if語句通過判斷"isIncludingisReturn"的(de)值來(lái)決定導航欄的(de)樣式,再定義一些其他(tā)的(de)變量來(lái)接收父組件傳過來(lái)的(de)值。
properties: {
isIncludingReturn:{
type: Boolean,
value: false
},
backgroundColor:{
type: String,
value: ''
},
content:{
type: String,
value: ''
},
textColor:{
type: String,
value:''
}
},
複制代碼
我們可以(yǐ)在(zài)data裏再定義一個(gè)navBarStyle變量,通過ES6的(de)拼接把之(zhī)前獲取高度以(yǐ)及一些其他(tā)的(de)樣式存進裏面,再傳到(dào)dom裏 之(zhī)後隻要(yào / yāo)在(zài)父組件裏傳值就(jiù)行了(le/liǎo),這(zhè)個(gè)闆塊的(de)css樣式很簡單,隻要(yào / yāo)實現文字的(de)垂直居中,選擇的(de)方法也(yě)很多,設置line-height,或者彈性布局都行。
用戶個(gè)人(rén)信息
這(zhè)個(gè)闆塊的(de)内容比較細,我們可以(yǐ)采用左右布局來(lái)實現,左邊放文字信息,右邊放圖片和(hé / huò)查看特權條

消息推送欄

<swiper class="pushMessage" autoplay interval="3000" duration="200" vertical="true" circular="true">
<block wx:for="{{messageList}}" wx:key="index">
<swiper-item>
<view class="message-box">{{item.content}}</view>
</swiper-item>
</block>
</swiper>
複制代碼
把messageList從數據源data調用,用上(shàng)循環遍曆,在(zài)稍微設置一下swiper的(de)基本屬性就(jiù)行了(le/liǎo)。具體的(de)可以(yǐ)查官方的(de)小程序文檔,這(zhè)裏的(de)布局也(yě)是(shì)彈性布局
青桔功能欄

青桔活動中心欄

底部導航欄

<view class="footer-bar">
<view class="bar bar-left">
<navigator class="footer-btn bar-mine" url="">我的(de)</navigator>
<navigator class="footer-btn bar-findCar" url="">找車</navigator>
</view>
<view class="bar bar-right">
<navigator class="footer-btn bar-parkingArea" url="">停車區</navigator>
<navigator class="footer-btn bar-more" url="">更多</navigator>
</view>
</view>
<view class="footer-bar__code">
<view class="code-box">
<image src="http://www.wxapp-union.com/image/掃二維碼.png" />
</view>
</view>
複制代碼
實現效果
還是(shì)有點像的(de)吧。。。

總結
這(zhè)個(gè)頁面的(de)布局還是(shì)不(bù)難的(de),很适合剛學不(bù)久的(de)同學們作爲(wéi / wèi)入手,用的(de)最多的(de)還是(shì)彈性布局,有不(bù)懂的(de)或者有改進的(de),歡迎在(zài)評論區留言
作者:xiaojianggege
來(lái)源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出(chū)處。