微信小程式實戰篇-分類頁面製作
哈嘍,大家好,又到週五啦,今天程式碼君要教大家分類頁面的製作,廢話不多說,先上效果圖
這個介面佈局難度不是很大,css基礎好的,很快就實現了,分類介面,左邊是一級目錄,右邊是一級目錄對應的二級目錄,根據這個需求,我們資料設計的結構一定是陣列巢狀陣列,第一個陣列包含一級目錄資料,巢狀的陣列包含的是二級目錄的資料。
程式碼的實現
classify.js
Page({ data: { cateItems: [ { cate_id: 1, cate_name: "護膚", ishaveChild: true, children: [ { child_id: 1
js的程式碼有點長,但是巨集觀看一下邏輯就很清晰了
- cateItems 展示的資料
- curNav 控制當前那個按鈕點亮
- curIndex 根據此引數來拿第幾個分類的資料
switchRightTab 分類tab事件的處理
cateItems裡的資料每一個物件都是一個品類的資料,拿第一個品類護膚來說,
cate_id 識別的id
- cate_name 一級分類名稱
- ishaveChild 判斷是否有子集
- children 二級目錄的資料
classify.wxml
<!--主盒子--> <view class="container"> <!--左側欄--> <view class="nav_left"> <block wx:for="{{cateItems}}"> <!--當前項的id等於item項的id,那個就是當前狀態--> <!--用data-index記錄這個資料在陣列的下標位置,使用data-id設定每個item的id值,供開啟2級頁面使用--> <view class="nav_left_items {{curNav == item.cate_id ? 'active' : ''}}" bindtap="switchRightTab" data-index="{{index}}" data-id="{{item.cate_id}}">{{item.cate_name}}</view> </block> </view> <!--右側欄--> <view class="nav_right"> <!--如果有資料,才遍歷項--> <view wx:if="{{cateItems[curIndex].ishaveChild}}"> <block wx:for="{{cateItems[curIndex].children}}"> <view class="nav_right_items"> <!--介面跳轉 --> <navigator url="../../detail/detail}}"> <image src="{{item.image}}"></image> <text>{{item.name}}</text> </navigator> </view> </block> </view> <!--如果無資料,則顯示資料--> <view class="nodata_text" wx:else>該分類暫無資料</view> </view> </view>
這裡面要講解的有
- nav_left_items {{curNav == item.cate_id ? ‘active’ : ”}} 在classify.js程式碼中已經說了curNav的作用,就是在這裡實現的,根據是否和一級目錄cate_id相同,來判斷是否點亮文字。相同執行.nav_left_items.active樣式,不相同則執行.nav_left_items樣式
- wx:for 和wx: if的知識點,這放在下面講,請繼續往下看
classify.wxss
page{ background: #f5f5f5; } /*總體主盒子*/ .container { position: relative; width: 100%; height: 100%; background-color: #fff; color: #939393; } /*左側欄主盒子*/ .nav_left{ /*設定行內塊級元素(沒使用定位)*/ display: inline-block; width: 25%; height: 100%; /*主盒子設定背景色為灰色*/ background: #f5f5f5; text-align: center; } /*左側欄list的item*/ .nav_left .nav_left_items{ /*每個高30px*/ height: 40px; /*垂直居中*/ line-height: 40px; /*再設上下padding增加高度,總高42px*/ padding: 6px 0; /*只設下邊線*/ border-bottom: 1px solid #dedede; /*文字14px*/ font-size: 14px; } /*左側欄list的item被選中時*/ .nav_left .nav_left_items.active{ /*背景色變成白色*/ background: #fff; color: #f0145a; } /*右側欄主盒子*/ .nav_right{ /*右側盒子使用了絕對定位*/ position: absolute; top: 0; right: 0; flex: 1; /*寬度75%,高度佔滿,並使用百分比佈局*/ width: 75%; height: 1000px; padding: 10px; box-sizing: border-box; background: #fff; } /*右側欄list的item*/ .nav_right .nav_right_items{ /*浮動向左*/ float: left; /*每個item設定寬度是33.33%*/ width: 33.33%; height: 120px; text-align: center; } .nav_right .nav_right_items image{ /*被圖片設定寬高*/ width: 60px; height: 60px; margin-top: 15px; } .nav_right .nav_right_items text{ /*給text設成塊級元素*/ display: block; margin-top: 15px; font-size: 14px; color: black; /*設定文字溢位部分為...*/ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .nodata_text { color: black; font-size: 14px; text-align: center; }
這裡有個小技巧分享給大家
- 要設定字型垂直居中要腫麼辦吶?
看我佈局的樣式【.nav_left .nav_left_items】把height與line-height兩個屬性設定成一樣的就可以輕鬆實現字型垂直居中,但是這個有侷限性,是字型要是單行的,為什麼吶,因為line-height本身就是設定行高 - 單行文字過長部分要用省略號應該如何寫樣式吶? 效果是醬紫 xxxxx…
overflow: hidden;
white-space: nowrap; //設定單行顯示
text-overflow: ellipsis;
- 要設定字型垂直居中要腫麼辦吶?
知識小課堂
wx:for
微信小程式列表的渲染,我們之前做首頁的時候就有接觸過用於迴圈陣列,展示列表型資料預設陣列的當前項的下標變數名預設為index,陣列當前項的變數名預設為item
<view wx:for="{{items}}"> {{index}}: {{item.message}} </view>
也可以自定義變量表使用 wx:for-item可以指定陣列當前元素的變數名
使用wx:for-index可以指定陣列當前下標的變數名<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> {{idx}}: {{itemName.message}} </view>
wx:if
微信小程式條件渲染,通常是在if裡面寫判斷語句,滿足條件就執行這個view控制元件,通常有if對應就有else,對應的不滿足if條件就執行else對應的view控制元件<view wx:if="{{length > 5}}"> 1 </view> <view wx:elif="{{length > 2}}"> 2 </view> <view wx:else> 3 </view>
我們要把wx:if 和 hidden 做對比,他們都可以實現讓控制元件顯示與隱藏,但是他們有什麼區別吶,if是當滿足條件的時候才會渲染view,而hidden是view一定會被渲染,只不過控制顯示與隱藏罷了,那麼我們要如何區分什麼時機用什麼方法吶?
一般來說,wx:if有更高的切換消耗而hidden有更高的初始渲染消耗。因此,如果需要頻繁切換的情景下,用hidden更好,如果在執行時條件不大可能改變則wx:if較好。
總結
好了,分類頁面的製作完成了,今天新增一個知識小課堂,目的很簡單,就是想把涉及到的知識要點歸類整理,方便讀者查閱。今天就到這,祝大家週末愉快~