微信小程序实现tab切换(可滑动切换)

导读:本篇文章讲解 微信小程序实现tab切换(可滑动切换),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

tab切换作为前端开发中最常见的组件之一,相信大家平时都用的不少吧,今天给大家分享一个微信小程序的tab切换,一起来看看吧。


实现效果:
在这里插入图片描述


实现思路

其实这个小功能的实现非常简单,只需要通过一个标识控制选项的样式及显示的内容,当我们触发点击或者滑动事件时动态的改变标识的值即可。话不多说,下面直接上实例代码。


wxml 文件

<view>
    <!-- Tab布局 -->
    <view class='navBox'>
        <view class='titleBox' bindtap='titleClick' data-idx='0'>
            <text class="{{0 == currentIndex ? 'fontColorBox' : ''}}">装备</text>
            <hr class="{{0 == currentIndex ? 'lineBox' : 'notLineBox'}}" />
        </view>
        <view class='titleBox' bindtap='titleClick' data-idx='1'>
            <text class="{{1 == currentIndex ? 'fontColorBox1' : ''}}">活动</text>
            <hr class="{{1 == currentIndex ? 'lineBox' : 'notLineBox'}} " />
        </view>
    </view>
    <!-- 内容布局 -->
    <swiper class='swiperTtemBox' bindchange='pagechange' current='{{currentIndex}}'>
        <swiper-item class='swiperTtemBox'>
            <view>装备内容</view>
        </swiper-item>
        <swiper-item class='swiperTtemBox'>
            <view>活动内容</view>
        </swiper-item>
    </swiper>
</view>

js文件

const app = getApp()
Page({
  data: {
    currentIndex: 0, //默认是活动项
  },
  // 切换swiper-item触发bindchange事件
  pagechange: function (e) {
    // 通过touch判断,改变tab的下标值
    if ("touch" === e.detail.source) {
      let currentPageIndex = this.data.currentIndex;
      currentPageIndex = (currentPageIndex + 1) % 2;
      // 拿到当前索引并动态改变
      this.setData({
        currentIndex: currentPageIndex,
      })
    }
  },

  //点击tab时触发
  titleClick: function (e) {
    this.setData({
      //拿到当前索引并动态改变
      currentIndex: e.currentTarget.dataset.idx
    })
  },
})

wxss 文件

Page {
    /* 全局样式 */
    background: rgb(244, 245, 249);
    height: 100%;
    position: fixed;
}

.fontColorBox,
.fontColorBox1 {
    /* 文字默认颜色 */
    color: black;
}

.navBox {
    /* 顶部tab盒子样式 */
    width: 100%;
    height: 108rpx;
    background: white;
    display: flex;
    align-items: center;
    justify-content: center;
}

.navBox view:last-child {
    /* 最后一个tab标题的样式 */
    padding-left: 20%;
}

.titleBox {
    /* 未选中文字的样式 */
    color: rgb(168, 170, 175);
    font-size: 30rpx;
    display: flex;
    flex-direction: column;
    align-items: center;
}
.lineBox,.notLineBox{
    /* 选中及未选中底线共同样式 */
    width: 32rpx;
    height: 8rpx;
}

.lineBox {
    /* 选中底线样式 */
    background: rgb(43, 44, 45);
    margin-top: 16rpx;
    border-radius: 4rpx;
}

.notLineBox {
    /* 未选中底线样式 */
    background: transparent;
}

.swiperTtemBox {
    /* 底部内容样式 */
    height: 100vh;
    overflow: scroll;
    margin: 12rpx 0rpx;
    background: white;
    font-size: 28rpx;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79376.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!