国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

微信小程序的分類頁(yè)面制作

2019-11-19 16:14:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

微信小程序?qū)嵉姆诸愴?yè)面制作

先上效果圖。

這個(gè)界面布局難度不是很大,css基礎(chǔ)好的,很快就實(shí)現(xiàn)了,分類界面,左邊是一級(jí)目錄,右邊是一級(jí)目錄對(duì)應(yīng)的二級(jí)目錄,根據(jù)

這個(gè)需求,我們數(shù)據(jù)設(shè)計(jì)的結(jié)構(gòu)一定是數(shù)組嵌套數(shù)組,第一個(gè)數(shù)組包含一級(jí)目錄數(shù)據(jù),嵌套的數(shù)組包含的是二級(jí)目錄的數(shù)據(jù)。

代碼的實(shí)現(xiàn)

classify.jsPage({data: { cateItems: [  {   cate_id: 1,   cate_name: "護(hù)膚",   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: '面部祛角質(zhì)',     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: "個(gè)人護(hù)理",   ishaveChild: false,   children: []  } ], curNav: 1, curIndex: 0},//事件處理函數(shù) switchRightTab: function (e) { // 獲取item項(xiàng)的id,和數(shù)組的下標(biāo)值  let id = e.target.dataset.id,  index = parseInt(e.target.dataset.index); // 把點(diǎn)擊到的某一項(xiàng),設(shè)為當(dāng)前index  this.setData({  curNav: id,  curIndex: index })}})

js的代碼有點(diǎn)長(zhǎng),但是宏觀看一下邏輯就很清晰了

  1. cateItems 展示的數(shù)據(jù)
  2. curNav 控制當(dāng)前那個(gè)按鈕點(diǎn)亮
  3. curIndex 根據(jù)此參數(shù)來(lái)拿第幾個(gè)分類的數(shù)據(jù)
  4. switchRightTab 分類tab事件的處理

cateItems里的數(shù)據(jù)每一個(gè)對(duì)象都是一個(gè)品類的數(shù)據(jù),拿第一個(gè)品類護(hù)膚來(lái)說(shuō),

  1. cate_id 識(shí)別的id
  2. cate_name 一級(jí)分類名稱
  3. ishaveChild 判斷是否有子集
  4. children 二級(jí)目錄的數(shù)據(jù)

classify.wxml

<!--主盒子--><view class="container"><!--左側(cè)欄--><view class="nav_left"> <block wx:for="{{cateItems}}">  <!--當(dāng)前項(xiàng)的id等于item項(xiàng)的id,那個(gè)就是當(dāng)前狀態(tài)-->  <!--用data-index記錄這個(gè)數(shù)據(jù)在數(shù)組的下標(biāo)位置,使用data-id設(shè)置每個(gè)item的id值,供打開2級(jí)頁(yè)面使用-->  <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><!--右側(cè)欄--><view class="nav_right"> <!--如果有數(shù)據(jù),才遍歷項(xiàng)--> <view wx:if="{{cateItems[curIndex].ishaveChild}}">  <block wx:for="{{cateItems[curIndex].children}}">   <view class="nav_right_items">   <!--界面跳轉(zhuǎn) -->    <navigator url="../../detail/detail}}">     <image src="{{item.image}}"></image>     <text>{{item.name}}</text>    </navigator>   </view>  </block> </view> <!--如果無(wú)數(shù)據(jù),則顯示數(shù)據(jù)--> <view class="nodata_text" wx:else>該分類暫無(wú)數(shù)據(jù)</view></view></view>

這里面要講解的有

  1. nav_left_items {{curNav == item.cate_id ? 'active' : ''}} 在classify.js代碼中已經(jīng)說(shuō)了curNav的作用,就是在這里實(shí)現(xiàn)的
  2. 根據(jù)是否和一級(jí)目錄cate_id相同,來(lái)判斷是否點(diǎn)亮文字。相同執(zhí)行.nav_left_items.active樣式,不相同則執(zhí)行.nav_left_items樣式
  3. wx:for 和wx: if的知識(shí)點(diǎn),這放在下面講,請(qǐng)繼續(xù)往下看
classify.wxsspage{ background: #f5f5f5; } /*總體主盒子*/ .container { position: relative; width: 100%; height: 100%; background-color: #fff; color: #939393; }/*左側(cè)欄主盒子*/ .nav_left{ /*設(shè)置行內(nèi)塊級(jí)元素(沒使用定位)*/ display: inline-block; width: 25%; height: 100%; /*主盒子設(shè)置背景色為灰色*/ background: #f5f5f5; text-align: center; } /*左側(cè)欄list的item*/ .nav_left .nav_left_items{ /*每個(gè)高30px*/ height: 40px; /*垂直居中*/ line-height: 40px; /*再設(shè)上下padding增加高度,總高42px*/ padding: 6px 0; /*只設(shè)下邊線*/ border-bottom: 1px solid #dedede; /*文字14px*/ font-size: 14px; } /*左側(cè)欄list的item被選中時(shí)*/ .nav_left .nav_left_items.active{ /*背景色變成白色*/ background: #fff; color: #f0145a; } /*右側(cè)欄主盒子*/ .nav_right{ /*右側(cè)盒子使用了絕對(duì)定位*/ position: absolute; top: 0; right: 0; flex: 1; /*寬度75%,高度占滿,并使用百分比布局*/ width: 75%; height: 1000px; padding: 10px; box-sizing: border-box; background: #fff; } /*右側(cè)欄list的item*/ .nav_right .nav_right_items{ /*浮動(dòng)向左*/ float: left; /*每個(gè)item設(shè)置寬度是33.33%*/ width: 33.33%; height: 120px; text-align: center; } .nav_right .nav_right_items image{ /*被圖片設(shè)置寬高*/ width: 60px; height: 60px; margin-top: 15px; } .nav_right .nav_right_items text{ /*給text設(shè)成塊級(jí)元素*/ display: block; margin-top: 15px; font-size: 14px; color: black;/*設(shè)置文字溢出部分為...*/ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .nodata_text{color: black;font-size: 14px; text-align: center; }

這里有個(gè)小技巧分享給大家 

要設(shè)置字體垂直居中要腫么辦吶?

看我布局的樣式【.nav_left .nav_left_items】把height與line-height兩個(gè)屬性設(shè)置成一樣的就可以輕松實(shí)現(xiàn)字體垂直居中,但是這個(gè)有局限性,是字體要是單行的,為什么吶,因?yàn)閘ine-height本身就是設(shè)置行高

單行文字過(guò)長(zhǎng)部分要用省略號(hào)應(yīng)該如何寫樣式吶? 效果是醬紫 xxxxx...

overflow: hidden;
white-space: nowrap; //設(shè)置單行顯示
text-overflow: ellipsis;

知識(shí)小課堂

1.wx:for

微信小程序列表的渲染,我們之前做首頁(yè)的時(shí)候就有接觸過(guò)用于循環(huán)數(shù)組,展示列表型數(shù)據(jù)

默認(rèn)數(shù)組的當(dāng)前項(xiàng)的下標(biāo)變量名默認(rèn)為index,數(shù)組當(dāng)前項(xiàng)的變量名默認(rèn)為item

<view wx:for="{{items}}">{{index}}: {{item.message}}</view>

也可以自定義變量表使用 wx:for-item可以指定數(shù)組當(dāng)前元素的變量名

使用wx:for-index可以指定數(shù)組當(dāng)前下標(biāo)的變量名

<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">{{idx}}: {{itemName.message}}</view>

2.wx:if

微信小程序條件渲染,通常是在if里面寫判斷語(yǔ)句,滿足條件就執(zhí)行這個(gè)view控件,通常有if對(duì)應(yīng)就有else,對(duì)應(yīng)的不滿足if條件就

3.執(zhí)行else對(duì)應(yīng)的view控件。

<view wx:if="{{length > 5}}"> 1 </view><view wx:elif="{{length > 2}}"> 2 </view><view wx:else> 3 </view>

我們要把 wx:if 和 hidden 做對(duì)比,他們都可以實(shí)現(xiàn)讓控件顯示與隱藏,但是他們有什么區(qū)別吶,if是當(dāng)滿足條件的時(shí)候才會(huì)渲染

5.view,而hidden是view一定會(huì)被渲染,只不過(guò)控制顯示與隱藏罷了,那么我們要如何區(qū)分什么時(shí)機(jī)用什么方法吶?
一般來(lái)說(shuō),wx:if有更高的切換消耗而hidden有更高的初始渲染消耗。因此,如果需要頻繁切換的情景下,用hidden更好,

6.如果在運(yùn)行時(shí)條件不大可能改變則wx:if較好。

總結(jié)

好了,分類頁(yè)面的制作完成了,

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 松阳县| 竹北市| 嘉义市| 南宁市| 绵竹市| 门头沟区| 扶绥县| 长顺县| 鄂托克旗| 广河县| 紫云| 来凤县| 木里| 阜康市| 凤凰县| 视频| 郑州市| 聂拉木县| 大竹县| 离岛区| 镇安县| 旅游| 大理市| 阿拉善右旗| 天水市| 玉屏| 宽城| 北票市| 虹口区| 黄石市| 新安县| 梅河口市| 黑河市| 青龙| 义马市| 朝阳区| 贺州市| 商都县| 万载县| 博乐市| 三门峡市|