1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 微信小程序tab切换 可滑动切换 导航栏跟随滚动实现

微信小程序tab切换 可滑动切换 导航栏跟随滚动实现

时间:2023-06-06 23:39:10

相关推荐

微信小程序tab切换 可滑动切换 导航栏跟随滚动实现

<view class="container">

<!-- tab导航栏 -->

<!-- scroll-left属性可以控制滚动条位置 -->

<!-- scroll-with-animation滚动添加动画过渡 -->

<scroll-view scroll-x="true" class="nav" scroll-left="{{navScrollLeft}}" scroll-with-animation="{{true}}">

<block wx:for="{{navData}}" wx:for-index="idx" wx:for-item="navItem" wx:key="idx">

<view class="nav-item {{currentTab == idx ?'active':''}}" data-current="{{idx}}" bindtap="switchNav">{{navItem.text}}</view>

</block>

</scroll-view>

<!-- 页面内容 -->

<swiper class="tab-box" current="{{currentTab}}" duration="300" bindchange="switchTab">

<swiper-item wx:for="{{[0,1,2,3,4,5,6,7,8]}}" wx:for-item="tabItem" wx:for-index="idx" wx:key="idx" class="tab-content">

{{tabItem}}

</swiper-item>

</swiper>

</view>

page{

width: 100%;

height: 100%;

}

.container{

width: 100%;

height: 100%;

}

.nav {

height: 80rpx;

width: 100%;

box-sizing: border-box;

overflow: hidden;

line-height: 80rpx;

background: #f7f7f7;

font-size: 16px;

white-space: nowrap;

position: fixed;

top: 0;

left: 0;

z-index: 99;

}

.nav-item {

width: 20%;

display: inline-block;

text-align: center;

}

.nav-item.active{

color: red;

}

.tab-box{

background: greenyellow;

padding-top: 80rpx;

height: 100%;

box-sizing: border-box;

}

.tab-content{

overflow-y: scroll;

}

const app = getApp()

Page({

data: {

motto: 'Hello World',

userInfo: {},

hasUserInfo: false,

canIUse: wx.canIUse('button.open-type.getUserInfo'),

navData: [

{

text: '首页'

},

{

text: '健康'

},

{

text: '情感'

},

{

text: '职场'

},

{

text: '育儿'

},

{

text: '纠纷'

},

{

text: '青葱'

},

{

text: '上课'

},

{

text: '下课'

}

],

currentTab: 0,

navScrollLeft: 0

},

//事件处理函数

onLoad: function () {

if (app.globalData.userInfo) {

this.setData({

userInfo: app.globalData.userInfo,

hasUserInfo: true

})

} else if (this.data.canIUse) {

// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

// 所以此处加入 callback 以防止这种情况

app.userInfoReadyCallback = res => {

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

} else {

// 在没有 open-type=getUserInfo 版本的兼容处理

wx.getUserInfo({

success: res => {

app.globalData.userInfo = res.userInfo

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

})

}

wx.getSystemInfo({

success: (res) => {

this.setData({

pixelRatio: res.pixelRatio,

windowHeight: res.windowHeight,

windowWidth: res.windowWidth

})

},

})

},

switchNav(event) {

var cur = event.currentTarget.dataset.current;

//每个tab选项宽度占1/5

var singleNavWidth = this.data.windowWidth / 5;

//tab选项居中

this.setData({

navScrollLeft: (cur - 2) * singleNavWidth

})

if (this.data.currentTab == cur) {

return false;

} else {

this.setData({

currentTab: cur

})

}

},

switchTab(event) {

var cur = event.detail.current;

var singleNavWidth = this.data.windowWidth / 5;

this.setData({

currentTab: cur,

navScrollLeft: (cur - 2) * singleNavWidth

});

}

})

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。