微信小程序?qū)崙?zhàn)篇-分類頁(yè)面制作

哈嘍菜谣,大家好珠漂,又到周五啦,今天代碼君要教大家分類頁(yè)面的制作尾膊,廢話不多說(shuō)媳危,先上效果圖


分類頁(yè)面.gif

這個(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)

  1. classify.js
Page({
  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: '古龍香水男士的最愛(ài)',
            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),但是宏觀看一下邏輯就很清晰了

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

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

  • cate_id 識(shí)別的id
  • cate_name 一級(jí)分類名稱
  • ishaveChild 判斷是否有子集
  • children 二級(jí)目錄的數(shù)據(jù)
  1. 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值术健,供打開(kāi)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>

這里面要講解的有

  • nav_left_items {{curNav == item.cate_id ? 'active' : ''}} 在classify.js代碼中已經(jīng)說(shuō)了curNav的作用荞估,就是在這里實(shí)現(xiàn)的咳促,根據(jù)是否和一級(jí)目錄cate_id相同,來(lái)判斷是否點(diǎn)亮文字勘伺。相同執(zhí)行.nav_left_items.active樣式跪腹,不相同則執(zhí)行.nav_left_items樣式
  • wx:for 和wx: if的知識(shí)點(diǎn),這放在下面講,請(qǐng)繼續(xù)往下看
  1. classify.wxss
page{  
  background: #f5f5f5;  
}  
/*總體主盒子*/  
.container {  
  position: relative;  
  width: 100%;  
  height: 100%;  
  background-color: #fff;  
  color: #939393;  
}
 /*左側(cè)欄主盒子*/  
.nav_left{  
  /*設(shè)置行內(nèi)塊級(jí)元素(沒(méi)使用定位)*/  
  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>
  1. wx:if
    微信小程序條件渲染趣席,通常是在if里面寫判斷語(yǔ)句,滿足條件就執(zhí)行這個(gè)view控件醇蝴,通常有if對(duì)應(yīng)就有else宣肚,對(duì)應(yīng)的不滿足if條件就執(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ì)渲染view,而hidden是view一定會(huì)被渲染惭适,只不過(guò)控制顯示與隱藏罷了笙瑟,那么我們要如何區(qū)分什么時(shí)機(jī)用什么方法吶?
一般來(lái)說(shuō)癞志,wx:if有更高的切換消耗而hidden有更高的初始渲染消耗往枷。因此,如果需要頻繁切換的情景下,用hidden更好错洁,如果在運(yùn)行時(shí)條件不大可能改變則wx:if較好秉宿。

總結(jié)

好了,分類頁(yè)面的制作完成了屯碴,今天新增一個(gè)知識(shí)小課堂描睦,目的很簡(jiǎn)單,就是想把涉及到的知識(shí)要點(diǎn)歸類整理导而,方便讀者查閱酌摇。今天就到這,祝大家周末愉快~

上一篇:微信小程序?qū)崙?zhàn)篇-下拉刷新與加載更多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗡载,一起剝皮案震驚了整個(gè)濱河市窑多,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洼滚,老刑警劉巖埂息,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遥巴,居然都是意外死亡姥芥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門啄寡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讯檐,“玉大人,你說(shuō)我怎么就攤上這事摆霉『来唬” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵携栋,是天一觀的道長(zhǎng)搭盾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)婉支,這世上最難降的妖魔是什么鸯隅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮向挖,結(jié)果婚禮上蝌以,老公的妹妹穿的比我還像新娘。我一直安慰自己何之,他們只是感情好跟畅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帝美,像睡著了一般碍彭。 火紅的嫁衣襯著肌膚如雪晤硕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天庇忌,我揣著相機(jī)與錄音舞箍,去河邊找鬼。 笑死皆疹,一個(gè)胖子當(dāng)著我的面吹牛疏橄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播略就,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捎迫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了表牢?” 一聲冷哼從身側(cè)響起窄绒,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崔兴,沒(méi)想到半個(gè)月后彰导,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敲茄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年位谋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堰燎。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掏父,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秆剪,到底是詐尸還是另有隱情赊淑,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布鸟款,位于F島的核電站膏燃,受9級(jí)特大地震影響茂卦,放射性物質(zhì)發(fā)生泄漏何什。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一等龙、第九天 我趴在偏房一處隱蔽的房頂上張望处渣。 院中可真熱鬧,春花似錦蛛砰、人聲如沸罐栈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荠诬。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柑贞,已是汗流浹背方椎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钧嘶,地道東北人棠众。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像有决,于是被迫代替她去往敵國(guó)和親闸拿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 文章分類 后臺(tái)文章分類列表頁(yè)模板導(dǎo)的詳細(xì)步驟建立數(shù)據(jù)表blog_category书幕,并添加相應(yīng)的文章字段使用php ...
    JoyceZhao閱讀 1,692評(píng)論 0 12
  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作新荤;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 4,691評(píng)論 0 11
  • WXML WXML(WeiXin Markup Language)是微信的一套標(biāo)簽語(yǔ)言台汇,結(jié)合基礎(chǔ)組件迟隅、事件系統(tǒng),可...
    許劍鋒閱讀 6,774評(píng)論 3 51
  • 以下劇透励七,未觀影的同學(xué)請(qǐng)自覺(jué)跳過(guò)此段智袭。故事在說(shuō)美國(guó)NASA的一個(gè)火星項(xiàng)目組,準(zhǔn)備在火星上研究一下有關(guān)生存環(huán)境方面的...
    iOSTbag閱讀 915評(píng)論 0 0
  • 其實(shí)對(duì)于表達(dá)我一直談不上自信掠抬,論語(yǔ)言功底文字內(nèi)容在頭馬沒(méi)有幾位讓我覺(jué)得比較厲害的吼野,最讓我佩服的倒是從容自信抑揚(yáng)頓挫...
    DennisFly閱讀 126評(píng)論 0 0