首頁 > 微信小程式 > 小程式開發 > 小程式開發九宮格介面的導航的程式碼實現

小程式開發九宮格介面的導航的程式碼實現

高洛峰
發布: 2017-03-20 15:46:36
原創
2475 人瀏覽過

本篇文章主要介紹了小程式開發實戰:實現九宮格介面的導航的程式碼實現,具有一定的參考價值,有興趣的可以了解一下。

小程式是長在微信上的,是行動端的介面,為了能夠更方便的使用,我們常常希望使用九宮格介面的方式作為導航,那要如何實現呢?

基於一個簡單的思考,九宮格就是三行三列,如果把行當作一個單位,再將每一行分成三列,那是不是就可以了?我們實踐一下。

首先來考慮九宮格資料的生成,每一個格子需要有一個圖示、一個標題、一個方便跳躍的路由,那天現在我們有九個頁面,所以定義一個一維數組即可。為了更好的進行後續的配置,我們將這個陣列獨立到一個檔案中routes.js,然後將其在index.js頁面中引用,routes放到index的目錄下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

var PageItems =

 [

  {

   text: '格子1',

   icon: '../../images/c1.png',

   route: '../c1/c1',

  },

  {

   text: '格子2',

   icon: '../../images/c2.png',

   route: '../c2/c2',

  },

   {

   text: '格子3',

   icon: '../../images/c3.png',

   route: '../c3/c3',

  },

  {

   text: '格子4',

   icon: '../../images/c4.png',

   route: '../c4/c4',

  },

  {

   text: '格子5',

   icon: '../../images/c5',

   route: '../c5/c5',

  },

  {

   text: '格子6',

   icon: '../../images/c6.png',

   route: '../c6/c6',

  },

  {

   text: '格子7',

   icon: '../../images/c7.png',

   route: '../c7/c7',

  },

  {

   text: '格子8',

   icon: '../../images/c8',

   route: '../c8/c8',

  },

  {

   text: '格子9',

   icon: '../../images/c9.png',

   route: '../c9/c9',

  }

 ];

module.exports = {

 PageItems: PageItems

}

登入後複製

在index.js頁面中我們引用routes.js,然後得到資料PageItems,但PageItems是一維數組,而我們前面思考是要用一行三列為一個組的,所以需要將這一維數組重新組合,最直接的方法就是產生一個數組,每個數組的元素又包含了一個只有三個元素的一維數組,代碼如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

//index.js

//获取应用实例

var app = getApp()

var routes = require('routes');

Page({

 data: {

  userInfo: {},

  cellHeight: '120px',

  pageItems: []

 },

 //事件处理函数

 onLoad: function () {

  var that = this

  console.log(app);

  //调用应用实例的方法获取全局数据

  app.getUserInfo(function (userInfo) {

   wx.setNavigationBarTitle({

    title: '全新测试追踪系统-' + userInfo.nickName,

    success: function (res) {

     // success

    }

   })

   that.setData({

    userInfo: userInfo

   })

   var pageItems = [];

   var row = [];

   var len = routes.PageItems.length;//重组PageItems

   len = Math.floor((len + 2) / 3) * 3;

   for (var i = 0; i < len; i++) {

    if ((i + 1) % 3 == 0) {

     row.push(indexs.PageItems[i]);

     pageItems.push(row);

     row = [];

     continue;

    }

    else {

     row.push(indexs.PageItems[i]);

    }

   }

   wx.getSystemInfo({

    success: function (res) {

     var windowWidth = res.windowWidth;

     that.setData({

      cellHeight: (windowWidth / 3) + &#39;px&#39;

     })

    },

    complete: function () {

     that.setData({

      pageItems: pageItems

     })

    }

   })

  })

 }

})

登入後複製

在index.wxml中,我們來佈局介面,由於每個格子都是一樣的,只是資料不一樣,所以想到用模板來呈現。為此,我們先做一個單元格的模板面cell.wxml.

1

2

3

4

5

6

7

8

9

10

<template name="cell">

 <navigator url="{{route}}" class="pages-item" style="height:{{cellHeight}}">

  <view class="{{text==null||text.length==0?&#39;pages-icon-wrapper-no-bg&#39;:&#39;pages-icon-wrapper&#39;}}" >

   <image src="{{icon}}" class="pages-icon"></image>

  </view>

  <view class="pages-text-wrapper">

   <text class="pages-text">{{text}}</text>

  </view>

 </navigator>

</template>

登入後複製

這裡看到兩個大括號內套的是從外面傳入的數據,然後在裡面可以進行簡單的邏輯判斷,以便於更好的呈現。例如text==null的時候,我們希望呈現的是一個空背景的格子,在有資料的時候我們希望呈現一個含背景的格子,所以

 程式碼如下:

1

"{{text==null||text.length==0?&#39;pages-icon-wrapper-no-bg&#39;:&#39;pages-icon-wrapper&#39;}}".

登入後複製

另外一點,由於我們是將該介面檔案當作模板的,所以必須要用template標記來包住,同時命一個名字name,這樣在引用模板的地方才可以辨識呼叫。 現在我們在index.wxml中引用這個模板

1

2

3

4

5

6

7

8

9

10

11

12

13

<!--index.wxml-->

<import src="cell.wxml" />

<view class="pages-container">

 <scroll-view scroll-y="true" class="pages-wrapper">

  <view wx:for="{{pageItems}}" wx:key="{{text}}">

   <view class="pages-row">

    <template is="cell" data="{{...item[0],cellHeight}}" />

    <template is="cell" data="{{...item[1],cellHeight}}" />

    <template is="cell" data="{{...item[2],cellHeight}}" />

   </view>

  </view>

 </scroll-view>

</view>

登入後複製

模板的引用使用import來引用,在呼叫的地方使用template和is,其中is指定的是cell.wxml中的name。 item[0]、item[1]、item[2]是循環傳入的資料,cellHeight是在index.js的data中存放的資料。將資料傳入至範本內部時,框架會將其展開在欄位的形式,即key-value對,所以再看cell.wxml文件,就會發現內部是直接使用key來作為數據的。 將資料呈現到介面之後,我們需要相當的樣式來配合,index.wxss程式碼如下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

/**index.wxss**/

.pages-container {

 height: 100%;

 display: flex;

 flex-direction: column;

 box-sizing: border-box;

 padding-top: 10rpx;

 padding-bottom: 10rpx;

}

.pages-title-bg {

 width: 100%;

}

.pages-wrapper {

}

.pages-row {

 width: 100%;

 display: flex;

 flex-direction: row;

 justify-content: space-around;

}

.pages-item {

 position: relative;

 padding: 10rpx;

 width: 33%;

 background-color: #fff;

 border: #ddd solid 1px;

}

.pages-icon-wrapper {

 display: flex;

 justify-content: space-around;

 align-items: center;

 margin: 10rpx;

 border-radius: 30%;

 height: 75%;

 background:#00CD0D;

}

.pages-icon-wrapper-no-bg {

 display: flex;

 justify-content: space-around;

 align-items: center;

 margin: 10rpx;

 height: 75%;

}

.pages-icon {

 width: 100rpx;

 height: 100rpx;

}

.pages-text-wrapper {

 text-align: center;

}

.pages-text {

 font-weight: bolder;

}

登入後複製

效果如下圖

小程式開發九宮格介面的導航的程式碼實現

我們模板中使用navigator元素來呈現格子,所以每個格子自然就可以導航了。

以上是小程式開發九宮格介面的導航的程式碼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板