微信小程序?qū)崿F(xiàn)tab切換

微信小程序使用的是類似MVVM類型的框架,本質(zhì)是數(shù)據(jù)驅(qū)動(dòng)視圖,換句話來(lái)說(shuō)就是邏輯層(javascript)去驅(qū)動(dòng)界面層(view)的改變,功能實(shí)現(xiàn)核心主要在于操作數(shù)據(jù)。

下面來(lái)詳細(xì)講解,微信小程序如何實(shí)現(xiàn)tab切換功能,如下圖所示:

微信小程序tab切換

第一步:

在wxml文件里面,搭建結(jié)構(gòu)。其中,tab盒子是tab整體,btns里面的view是切換按鈕,cons里面的view是切換的盒子內(nèi)容。

wxml:

<!--index.wxml-->

<view class="tab">

 <view class="btns">

   <view></view>

 </view>

 <view class="cons">

   <view></view>

 </view>

</view>

第二步:

把切換按鈕btns和內(nèi)容cons渲染出來(lái)。在js文件里面書寫數(shù)據(jù),并且在wxml文件里面通過(guò)wx:for進(jìn)行列表渲染輸出。

js:

//index.js

//獲取應(yīng)用實(shí)例

const app = getApp()

Page({

 data: {

   btns:["PS","RP","AE","C4D"],

    cons: ["PS", "RP", "AE", "C4D"],

 }

})

wxml:

<!--index.wxml-->

<view class="tab">

 <view class="btns">

   <view wx:for="{{btns}}">{{item}}</view>

 </view>

 <view class="cons">

   <view wx:for="{{cons}}">{{item}}</view>

 </view>

</view>

第三步:

通過(guò)彈性布局去書寫樣式。添加cur當(dāng)前類名去控制當(dāng)前按鈕的樣式和當(dāng)前顯示的內(nèi)容盒子。

注意微信小程序使用的是rpx可以自適應(yīng)的單位,規(guī)定所有屏幕寬度為750rpx,在iPhone6設(shè)備屏幕寬度換算是2rpx=1px。

wxss:

.tab{width: 96%; height:600rpx; border:2rpxsolid #cccccc; margin:60rpx auto;}

.tab .btns{ height: 120rpx; background: #eeeeee;display: flex;}

.tab .btns view{flex: 1; text-align: center; line-height:120rpx;}

.tab .btns .cur{background: #ffffff;}

.tab .cons view{height: 480rpx;display: none; text-align: center; line-height:480rpx; font-size:60rpx;}

.tab .cons .cur{display: block;}

js:

邏輯層添加了active數(shù)據(jù)控制當(dāng)前顯示盒子。

//index.js

//獲取應(yīng)用實(shí)例

const app = getApp()

Page({

 data: {

   btns:["PS","RP","AE","C4D"],

   cons: ["PS", "RP", "AE", "C4D"],

   active:0,//控制當(dāng)前顯示盒子 

 }

})

wxml:

wxml要書寫判斷驗(yàn)證去控制盒子是否有cur類名。

class="{{index==active?'cur':''}}"

上面表達(dá)式表示,如果當(dāng)前項(xiàng)的索引值index等于數(shù)據(jù)active,則此項(xiàng)有cur這個(gè)類名,否則就沒(méi)有。注意cur類名是控制當(dāng)前按鈕樣式和當(dāng)前顯示內(nèi)容盒子的。

<!--index.wxml-->

<view class="tab">

 <view class="btns">

   <view wx:for="{{btns}}" class="{{index==active?'cur':''}}">{{item}}</view>

 </view>

 <view class="cons">

   <view wx:for="{{cons}}" class="{{index==active?'cur':''}}">{{item}}</view>

 </view>

</view>

第四步:

有cur這個(gè)類名的按鈕會(huì)顯示當(dāng)前的樣式,有cur這個(gè)類名的內(nèi)容盒子是顯示的,但是否有這個(gè)類名是通過(guò)active這個(gè)數(shù)據(jù)決定的。所以最后我們只需要把a(bǔ)ctive這個(gè)數(shù)據(jù)的值修改成用戶點(diǎn)擊按鈕的索引值即可實(shí)現(xiàn)tab切換功能。

首先要給按鈕btn自定義索引值等于循環(huán)當(dāng)前項(xiàng)的index,微信小程序給組件自定義索引值是通過(guò)在組件身上添加data-index=”{{index}}”屬性,然后在js里面即可通過(guò)事件對(duì)象里面的e.currentTarget.dataset.index屬性獲取用戶點(diǎn)擊按鈕的索引值。

wxml:

給按鈕自定義索引值和綁定事件,綁定點(diǎn)擊事件通過(guò)給按鈕組件添加屬性bindtap=“函數(shù)名”,此處設(shè)置函數(shù)名為toggle。

<!--index.wxml-->

<view class="tab">

 <view class="btns">

   <view wx:for="{{btns}}" class="{{index==active?'cur':''}}" data-index="{{index}}" bindtap="toggle">{{item}}</view>

 </view>

 <view class="cons">

   <view wx:for="{{cons}}" class="{{index==active?'cur':''}}">{{item}}</view>

 </view>

</view>

js:

把a(bǔ)ctive的值設(shè)置為用戶點(diǎn)擊按鈕的索引值,即可實(shí)現(xiàn)tab切換功能。

e.currentTarget.dataset.index獲取用戶點(diǎn)擊按鈕的索引值,微信小程序通過(guò)this.setData()去修改data里面的數(shù)據(jù)內(nèi)容。

//index.js

//獲取應(yīng)用實(shí)例

const app = getApp()

Page({

 data: {

   btns:["PS","RP","AE","C4D"],

   cons: ["PS", "RP", "AE", "C4D"],

   active:0,//控制當(dāng)前顯示盒子 

 },

 toggle:function(e){

   //console.log(e.currentTarget.dataset.index)

   this.setData({

     //設(shè)置active的值為用戶點(diǎn)擊按鈕的索引值

     active:e.currentTarget.dataset.index,

   })

 }

})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 微信小程序由于適用性強(qiáng)、邏輯簡(jiǎn)要、開(kāi)發(fā)迅速的特性,疊加具有海量活躍用戶的騰訊公司背景,逐漸成為了輕量級(jí)單一功能應(yīng)用...
    純文筆記閱讀 4,191評(píng)論 1 9
  • 每天的學(xué)習(xí)記錄,可能有的地方寫的不對(duì),因?yàn)閯倢W(xué),以后發(fā)現(xiàn)錯(cuò)的話會(huì)回來(lái)改掉整體流程 https://develope...
    有點(diǎn)健忘閱讀 5,018評(píng)論 0 7
  • 1.小程序起步 (1)點(diǎn)擊https://mp.weixin.qq.com/wxopen/waregister?a...
    GXW_Lyon閱讀 3,589評(píng)論 0 0
  • 因新工作主要負(fù)責(zé)微信小程序這一塊,最近的重心就移到這一塊,該博客是對(duì)微信小程序整體的整理歸納以及標(biāo)明一些細(xì)節(jié)點(diǎn),初...
    majun00閱讀 7,632評(píng)論 0 9
  • 說(shuō)明 本系列文章本人基本沒(méi)有原創(chuàng)貢獻(xiàn),都是在學(xué)習(xí)過(guò)程中找到的相關(guān)書籍和教程相關(guān)內(nèi)容的匯總和梳理編輯。為了尊重原創(chuàng)者...
    若緣生閱讀 3,255評(píng)論 1 5

友情鏈接更多精彩內(nèi)容