這篇文章主要介紹了微信小程式九宮格實例程式碼的相關資料,需要的朋友可以參考下
微信小程式九宮格
實現效果圖:
,是行動端的介面,為了能夠更方便的使用,我們常常希望使用九宮格介面的方式作為導航,那又如何實現呢?
基於一個簡單的思考,九宮格就是三行三列,如果把行當作一個單位,再將每一行分成三列,那是不是就可以了?我們實踐一下。
首先來考慮九宮格資料的生成,每一個格子需要有一個圖標、一個標題、一個便於跳轉的路由,那天現在我們有九個頁面,所以定義一個一維數組即可。為了更好的進行後續的配置,我們將這個陣列獨立到一個檔案中routes.js,然後將其在index.js頁面中引用,routes放到index的目錄下。
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是一維數組,而我們前面思考是要用一行三列為一個組的,所以需要將這一維數組進行重新組合,最直接的方法就是產生一個數組,每個數組的元素又包含了一個只有三個元素的一維數組,代碼如下
//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) + 'px' }) }, complete: function () { that.setData({ pageItems: pageItems }) } }) }) } })
在index.wxml中,我們來佈局介面,由於每個格子都是一樣的,只是資料不一樣,所以想到用模板來呈現。為此,我們先做一個單元格的模板面cell.wxml.
<template name="cell"> <navigator url="{{route}}" class="pages-item" style="height:{{cellHeight}}"> <view class="{{text==null||text.length==0?'pages-icon-wrapper-no-bg':'pages-icon-wrapper'}}" > <image src="{{icon}}" class="pages-icon"></image> </view> <view class="pages-text-wrapper"> <text class="pages-text">{{text}}</text> </view> </navigator> </template>
這裡看到兩個大括號內套的是從外面傳入的數據,然後在裡面可以進行簡單的邏輯判斷,以便於更好的呈現。例如text==null的時候,我們希望呈現的是一個空背景的格子,在有數據的時候我們希望呈現一個含背景的格子,所以"{{text==null||text.length==0? 'pages-icon-wrapper-no-bg':'pages-icon-wrapper'}}".
另外一點,由於我們是將該介面檔案當作範本的,所以必須要用template標記來包住,同時命一個名字name,這樣在引用模板的地方才可以辨識出呼叫。
現在我們在index.wxml中引用這個模板
<!--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程式碼如下。
/**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中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境