本文實(shí)例為大家分享了微信小程序?qū)崿F(xiàn)滾動(dòng)Tab選項(xiàng)卡的具體代碼,供大家參考,具體內(nèi)容如下
最終效果如上。問(wèn)題:
1、tab標(biāo)題總共8個(gè),所以一屏無(wú)法全部顯示。
2、tab內(nèi)容區(qū)左右滑動(dòng)切換時(shí),tab標(biāo)題隨即做標(biāo)記(active)。
3、當(dāng)active的標(biāo)題不在當(dāng)前屏顯示時(shí),要使其能顯示到當(dāng)前屏中。
一、wxml結(jié)構(gòu)
tab標(biāo)題因一排八個(gè),所以使用 scroll-view組件,使其可橫向滾動(dòng)。
tab內(nèi)容可左右滑動(dòng)切換,使用swiper組件實(shí)現(xiàn)
為了偷懶,所以數(shù)據(jù)都通過(guò)wx:for遍歷重復(fù)出來(lái)。
說(shuō)明:
1、設(shè)置data-current屬性用于:點(diǎn)擊當(dāng)前項(xiàng)時(shí),通過(guò)點(diǎn)擊事件swichNav中處理e.dataset.current取到點(diǎn)擊的目標(biāo)值。
2、swiper組件的current組件用于控制當(dāng)前顯示哪一頁(yè)
3、swiper組件綁定change事件switchTab,通過(guò)e.detail.current拿到當(dāng)前頁(yè)
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
|
< view > < scroll-view scroll-x = "true" class = "tab-h" scroll-left = "{{scrollLeft}}" > < view class = "tab-item {{currentTab==0?'active':''}}" data-current = "0" bindtap = "swichNav" >健康</ view > < view class = "tab-item {{currentTab==1?'active':''}}" data-current = "1" bindtap = "swichNav" >情感</ view > < view class = "tab-item {{currentTab==2?'active':''}}" data-current = "2" bindtap = "swichNav" >職場(chǎng)</ view > < view class = "tab-item {{currentTab==3?'active':''}}" data-current = "3" bindtap = "swichNav" >育兒</ view > < view class = "tab-item {{currentTab==4?'active':''}}" data-current = "4" bindtap = "swichNav" >糾紛</ view > < view class = "tab-item {{currentTab==5?'active':''}}" data-current = "5" bindtap = "swichNav" >青蔥</ view > < view class = "tab-item {{currentTab==6?'active':''}}" data-current = "6" bindtap = "swichNav" >全部</ view > < view class = "tab-item {{currentTab==7?'active':''}}" data-current = "7" bindtap = "swichNav" >其他</ view > </ scroll-view > < swiper class = "tab-content" current = "{{currentTab}}" duration = "300" bindchange = "switchTab" style = "height:{{winHeight}}rpx" > < swiper-item wx:for = "{{[0,1,2,3,4,5,6,7]}}" > < scroll-view scroll-y = "true" class = "scoll-h" > < block wx:for = "{{[1,2,3,4,5,6,7,8]}}" wx:key = "*this" > < view class = "item-ans" > < view class = "avatar" > < image class = "img" src = "/avatar.png" ></ image > </ view > < view class = "expertInfo" > < view class = "name" >歡顏</ view > < view class = "tag" >知名情感博主</ view > < view class = "answerHistory" >134個(gè)回答,2234人聽(tīng)過(guò) </ view > </ view > < navigator url = "/pages/askExpert/expertDetail" class = "askBtn" >問(wèn)TA</ navigator > </ view > </ block > </ scroll-view > </ swiper-item > </ swiper > </ view > |
二、js部分
微信小程序在開(kāi)發(fā)起來(lái),個(gè)人感覺(jué)挺像vue的,以數(shù)據(jù)驅(qū)動(dòng)視圖的更新。所以在小程序中,不能直接操作dom,當(dāng)然也不能使用jquery之類的庫(kù)。
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
57
58
59
60
61
|
var app = getApp(); Page({ data:{ winHeight: "" , //窗口高度 currentTab:0, //預(yù)設(shè)當(dāng)前項(xiàng)的值 scrollLeft:0, //tab標(biāo)題的滾動(dòng)條位置 expertList:[{ //假數(shù)據(jù) img: "avatar.png" , name: "歡顔" , tag: "知名情感博主" , answer:134, listen:2234 }] }, // 滾動(dòng)切換標(biāo)簽樣式 switchTab: function (e){ this .setData({ currentTab:e.detail.current }); this .checkCor(); }, // 點(diǎn)擊標(biāo)題切換當(dāng)前頁(yè)時(shí)改變樣式 swichNav: function (e){ var cur=e.target.dataset.current; if ( this .data.currentTaB==cur){ return false ;} else { this .setData({ currentTab:cur }) } }, //判斷當(dāng)前滾動(dòng)超過(guò)一屏?xí)r,設(shè)置tab標(biāo)題滾動(dòng)條。 checkCor: function (){ if ( this .data.currentTab>4){ this .setData({ scrollLeft:300 }) } else { this .setData({ scrollLeft:0 }) } }, onLoad: function () { var that = this ; // 高度自適應(yīng) wx.getSystemInfo( { success: function ( res ) { var clientHeight=res.windowHeight, clientWidth=res.windowWidth, rpxR=750/clientWidth; var calc=clientHeight*rpxR-180; console.log(calc) that.setData( { winHeight: calc }); } }); }, footerTap:app.footerTap }) |
三、wxss樣式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
.tab-h{ height : 80 rpx; width : 100% ; box-sizing: border-box; overflow : hidden ; line-height : 80 rpx; background : #F7F7F7 ; font-size : 16px ; white-space : nowrap ; position : fixed ; top : 0 ; left : 0 ; z-index : 99 ;} .tab-item{ margin : 0 36 rpx; display : inline- block ;} .tab-item.active{ color : #4675F9 ; position : relative ;} .tab-item.active:after{ content : "" ; display : block ; height : 8 rpx; width : 52 rpx; background : #4675F9 ; position : absolute ; bottom : 0 ; left : 5 rpx;border-radius: 16 rpx;} .item-ans{ width : 100% ; display : flex; flex-grow: row no-wrap;justify- content : space-between; padding : 30 rpx;box-sizing: border-box; height : 180 rpx;align-items: center ; border-bottom : 1px solid #F2F2F2 ;} .avatar{ width : 100 rpx; height : 100 rpx; position : relative ; padding-right : 30 rpx;} .avatar .img{ width : 100% ; height : 100% ;} .avatar .doyen{ width : 40 rpx; height : 40 rpx; position : absolute ; bottom : -2px ; right : 20 rpx;} .expertInfo{ font-size : 12px ;flex-grow: 2 ; color : #B0B0B0 ; line-height : 1.5em ;} .expertInfo .name{ font-size : 16px ; color : #000 ; margin-bottom : 6px ;} .askBtn{ width : 120 rpx; height : 60 rpx; line-height : 60 rpx; text-align : center ; font-size : 14px ; border-radius: 60 rpx; border : 1px solid #4675F9 ; color : #4675F9 ;} .tab-content{ margin-top : 80 rpx;} .scoll-h{ height : 100% ;} |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/Sophie_U/article/details/71745125