中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信小程序的分類頁面制作

發布時間:2020-08-26 09:12:00 來源:腳本之家 閱讀:399 作者:lqh 欄目:web開發

微信小程序實的分類頁面制作

先上效果圖。

微信小程序的分類頁面制作

這個界面布局難度不是很大,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的代碼有點長,但是宏觀看一下邏輯就很清晰了

  1. cateItems 展示的數據
  2. curNav 控制當前那個按鈕點亮
  3. curIndex 根據此參數來拿第幾個分類的數據
  4. switchRightTab 分類tab事件的處理

cateItems里的數據每一個對象都是一個品類的數據,拿第一個品類護膚來說,

  1. cate_id 識別的id
  2. cate_name 一級分類名稱
  3. ishaveChild 判斷是否有子集
  4. 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>

這里面要講解的有

  1. nav_left_items {{curNav == item.cate_id ? 'active' : ''}} 在classify.js代碼中已經說了curNav的作用,就是在這里實現的
  2. 根據是否和一級目錄cate_id相同,來判斷是否點亮文字。相同執行.nav_left_items.active樣式,不相同則執行.nav_left_items樣式
  3. 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;

知識小課堂

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較好。

總結

好了,分類頁面的制作完成了,

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临泉县| 钟山县| 嘉定区| 尉氏县| 乌拉特前旗| 铁岭市| 泗洪县| 娱乐| 嘉定区| 容城县| 兴海县| 布拖县| 油尖旺区| 星座| 萨迦县| 上饶市| 英吉沙县| 雷波县| 怀来县| 嘉鱼县| 南和县| 岚皋县| 土默特左旗| 织金县| 黄大仙区| 托克托县| 四会市| 普安县| 韩城市| 镇康县| 九龙县| 红河县| 平乐县| 神农架林区| 朝阳区| 栾城县| 平罗县| 武宣县| 柳河县| 罗平县| 全椒县|