小程序实现tab标签页:可点击切换,滑动切换页面

页面效果:

HTML: 


  <view wx:if="{{userType==0}}" style="height:100%">
    <view class="tab_box" style="width: 100%">
      <view class="tabs_v">
        <block wx:for="{{tabs}}" wx:for-item="item" wx:key="index">
          <view class="tab_v {{index<1?'tab_nature':'tab_course'}}" bindtap='changeCurrentTab_' data-index='{{index}}'
            data-current='{{index}}'>
            <text class="tab_txt {{currentTab==index? 'tab_v_active' : ''}}">{{item.label}}</text>
          </view>
        </block>
      </view>
    </view>
    <!-- tab 容器 -->
    <view class="tabWrap">
      <swiper class="" current="{{currentTab}}" duration="300" bindchange="swiperTab" style="width:100%;height:100%;">
        <!-- 页面1 -->
        <block>
          <swiper-item style="width:100%;height:100%;">
            <view class="" style="width:100%;height:100%;">
              <scroll-view style="width:100%;height:100%;" scroll-y="true" bindscrolltolower='scrollToLower'
                bindscrolltoupper='scrollToUpper' lower-threshold='30' upper-threshold='30'>
                <view style="width:100%;height:auto;">
                  页面1
                </view>
              </scroll-view>
            </view>
          </swiper-item>
        </block>
        <!-- 页面2 -->
        <block>
          <swiper-item style="width:100%;height:100%;">
            <view class="" style="width:100%;height:100%;">
              <scroll-view style="width:100%;height:100%;" scroll-y="true" bindscrolltolower='scrollToLower'
                bindscrolltoupper='scrollToUpper' lower-threshold='30' upper-threshold='30'>
                <view style="width:100%;height:auto;">
                  页面2
                </view>
              </scroll-view>
            </view>
          </swiper-item>
        </block>
      </swiper>
    </view>
  </view>

CSS:

/* tab */
.tab_box{
  height: 50px;
  display: flex;
  flex-direction: row;
  background-color: #fff;
  border-bottom: 1px solid #E5E5E5;
  margin-bottom: 15px;
}
.tabs_v{
  width: 100%;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
}
.tab_v{
  width: 50%;
  text-align: center;
}
.tab_txt{
  border-bottom: 2px solid transparent;
  padding-bottom: 14px;
  color: #999999;
}
.tab_v_active{
  border-bottom: 2px solid #00C6AC;
  color: #00C6AC;
  font-weight: bold;
}
/* 容器 */
.tabWrap{
  width: 100%;
  height: calc(100% - 67px);
  position: relative;
  border-bottom: 1px solid #e6e6e6;
}

JS:


Page({

  /**
   * 页面的初始数据
   */
  data: {
    tabs: [
      {label:'访客', index: 0},
      {label:'工作人员', index: 1}
    ],
    currentTab:0
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  // tab切换
  changeCurrentTab_(e){
    let that = this
    if (that.data.currentTab === e.currentTarget.dataset.current){
      return false
    }else{
      that.setData({ 
        currentTab: e.currentTarget.dataset.current
      })
    }
  },
  //滑动切换
  swiperTab: function (e) {
    var that = this;
    that.setData({
      currentTab: e.detail.current
    });
  }
})

 

微信小程序中的tab切换下划线滑动效果是指在用户切换不同tab标签)时,底部的指示线会随着当前选中的tab移动,产生滑动效果。这样的效果通常用于给用户提供视觉上的反馈,表明当前所在的页面或选项。 要实现这种效果,可以通过微信小程序提供的组件和API来完成。具体来说,可以通过以下步骤实现: 1. 使用`<view>`标签创建tab栏,并为每个tab设置相应的数据绑定和点击事件处理函数。 2. 使用`wx.createAnimation`创建一个动画实例,并通过动画方法设置下划线的移动效果。 3. 在tab点击事件的回调函数中,根据当前选中的tab位置,更新下划线的样式,使下划线移动到相应的位置。 这里是一个简化的代码示例: ```javascript Page({ data: { activeTab: 0, tabWidth: 250, // 假设每个tab的宽度是250px tabHeight: 40 // 假设下划线的高度是40px }, changeTab(e) { const newActiveTab = e.detail.index; this.setData({ activeTab: newActiveTab }); this.updateUnderline(newActiveTab); }, updateUnderline(index) { const animation = wx.createAnimation({ duration: 300, timingFunction: 'ease', }); const x = index * this.data.tabWidth; animation.move({ x: x, y: 0, duration: 300, timingFunction: 'ease', }).step(); this.setData({ underlineStyle: animation.export() }); } }); ``` 在wxml中定义tab栏和下划线: ```xml <view class="tab-bar"> <block wx:for="{{tabs}}" wx:key="unique"> <view class="tab-item" bindtap="changeTab" data-index="{{index}}" wx:if="{{index === activeTab}}"> {{item.title}} </view> </block> <view class="tab-underline" style="{{underlineStyle}}"></view> </view> ``` 在wxss中设置tab栏和下划线的样式: ```css .tab-bar { display: flex; } .tab-item { height: 40px; line-height: 40px; /* 其他样式 */ } .tab-underline { height: 4px; width: 250px; background-color: #1AAD19; position: absolute; bottom: 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路痴不脸盲

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值