您好,登錄后才能下訂單哦!
微信小程序實的分類頁面制作
先上效果圖。
這個界面布局難度不是很大,css基礎好的,很快就實現了,分類界面,左邊是一級目錄,右邊是一級目錄對應的二級目錄,根據
這個需求,我們數據設計的結構一定是數組嵌套數組,第一個數組包含一級目錄數據,嵌套的數組包含的是二級目錄的數據。
代碼的實現
classify.js Page({ data: { cateItems: [ { cate_id: 1, cate_name: "護膚", ishaveChild: true, children: [ { child_id: 1, name: '潔面皂', image: "http://mz.djmall.xmisp.cn/files/logo/20161208/148117972563.jpg" }, { child_id: 2, name: '卸妝', image: "http://mz.djmall.xmisp.cn/files/logo/20161207/148110444480.jpg" }, { child_id: 3, name: '潔面乳', image: "http://mz.djmall.xmisp.cn/files/logo/20161208/148117973270.jpg" }, { child_id: 4, name: '面部祛角質', image: "http://mz.djmall.xmisp.cn/files/logo/20161208/148117981591.jpg" } ] }, { cate_id: 2, cate_name: "彩妝", ishaveChild: true, children: [ { child_id: 1, name: '氣墊bb', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/14815381301.jpg" }, { child_id: 2, name: '修容/高光', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/14815381411.jpg" }, { child_id: 3, name: '遮瑕', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/148153815181.jpg" }, { child_id: 4, name: '腮紅', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/148153815759.jpg" }, { child_id: 5, name: '粉餅', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/148153816983.jpg" }, { child_id: 6, name: '粉底', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/148153817721.jpg" }, { child_id: 7, name: '蜜粉/散粉', image: "http://mz.djmall.xmisp.cn/files/logo/20161212/148153819354.jpg" }, { child_id: 8, name: '隔離霜', image: "http://mz.djmall.xmisp.cn/files/logo/20161215/148179053369.jpg" } ] }, { cate_id: 3, cate_name: "香水/香氛", ishaveChild: true, children: [ { child_id: 1, name: '淡香水EDT', image: "http://mz.djmall.xmisp.cn/files/logo/20161213/14815978910.jpg" }, { child_id: 2, name: '濃香水EDP', image: "http://mz.djmall.xmisp.cn/files/logo/20161213/148159789883.jpg" }, { child_id: 3, name: '香體走珠', image: "http://mz.djmall.xmisp.cn/files/logo/20161213/14815979307.jpg" }, { child_id: 4, name: '古龍香水男士的最愛', image: "http://mz.djmall.xmisp.cn/files/logo/20161213/148159765589.jpg" } ] }, { cate_id: 4, cate_name: "個人護理", ishaveChild: false, children: [] } ], curNav: 1, curIndex: 0 }, //事件處理函數 switchRightTab: function (e) { // 獲取item項的id,和數組的下標值 let id = e.target.dataset.id, index = parseInt(e.target.dataset.index); // 把點擊到的某一項,設為當前index this.setData({ curNav: id, curIndex: index }) } })
js的代碼有點長,但是宏觀看一下邏輯就很清晰了
cateItems里的數據每一個對象都是一個品類的數據,拿第一個品類護膚來說,
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>
這里面要講解的有
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;
知識小課堂
1.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>
2.wx:if
微信小程序條件渲染,通常是在if里面寫判斷語句,滿足條件就執行這個view控件,通常有if對應就有else,對應的不滿足if條件就
3.執行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是當滿足條件的時候才會渲染
5.view,而hidden是view一定會被渲染,只不過控制顯示與隱藏罷了,那么我們要如何區分什么時機用什么方法吶?
一般來說,wx:if有更高的切換消耗而hidden有更高的初始渲染消耗。因此,如果需要頻繁切換的情景下,用hidden更好,
6.如果在運行時條件不大可能改變則wx:if較好。
總結
好了,分類頁面的制作完成了,
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。