微信小程序丝滑的tab栏

简介: 微信小程序丝滑的tab栏

微信小程序丝滑的tab栏

image.png

可以左右滑动


index.js

data: {
        motto: 'Hello World',
        userInfo: {},
        hasUserInfo: false,
        canIUse: wx.canIUse('button.open-type.getUserInfo'), navData: [
            {
                text: '孕产妇'
            },
            {
                text: '婴幼儿'
            },
            {
                text: '中老年人'
            },
            {
            {
                text: '传染病'
            },
            {
                text: '精神病'
            },
            {
                text: '职业病'
            },
            {
                text: '老年病'
            },
            {
                text: '疾病'
            }
        ],
        currentTab: 0,
        navScrollLeft: 0,
        windowWidth: wx.getSystemInfoSync().windowWidth,  list: [{ title: " 啊实打实大所大所多", img: "最新!新增确诊病例59例,其中本土50例" },
        { title: " 阿萨大师大大", img: "" },
        ]
    },
 //事件处理函数
    onLoad: function () {
        var that = this;
        //  高度自适应 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
                });
            }
        });  },
    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) {
        console.log(event);
        var cur = event.detail.current; var singleNavWidth = this.data.windowWidth / 5;
        console.log(cur, "----", singleNavWidth, "----", (cur - 2) * singleNavWidth);
        this.setData({  currentTab: cur,
            navScrollLeft: (cur - 2) * singleNavWidth
        });
        this.checkCor();
    }, //判断当前滚动超过一屏时,设置tab标题滚动条。
    checkCor: function () {
        if (this.data.currentTab > 4) {
            this.setData({   scrollLeft: 300
            })
        } else {
            this.setData({  scrollLeft: 0
            })
        }
    },

index.wxcss

page {
    width: 100%;
    height: 100%;
    background-color: #F2F2F2;
}
.container {
    width: 100%;
    height: 100%;
}
.listPar {
    position: relative;
    height: 96rpx;
}
.more {
    position: absolute;
    width: 120rpx;
    height: 96rpx;
    line-height: 96rpx;
    z-index: 100;
    left: 84%;
    /* background-color: linear-gradient( white 90%, 30% ,#ffffff88 10%); */
    background: linear-gradient(to left top, white 20%, rgba(255, 255, 255, 0.8) 80%);
    /* background-color: fuchsia; */
    text-align
}
.moreImg {
    width: 32rpx;
    height: 32rpx;
}
.nav {
    padding-right: 85rpx;
    position: absolute;
    height: 96rpx;
    width: 100%;
    box-sizing: border-box;
    overflow: hidden;
    line-height: 96rpx;
    background: white;
    font-size: 16px;
    white-space: nowrap;
     top: 0;
    left: 0;
    z-index: 99;
}
.nav-item {
    margin: 0rpx 34rpx;
    display: inline-block;
    text-align: center;
    line-height: 86rpx;
    font-size: 28rpx;
    font-weight: 400;
    color: #999999;
}
.nav-item.active {
    font-size: 32rpx;
    font-weight: 500;
    color: #316CEC;
}
.nav-line {
    margin: 0rpx 20rpx;
    height: 0px;
}
.nav-line.active {
    height: 4rpx;
    background: #316CEC;
    border-radius: 8px;
}
.nav-item.active:after {
    content: "";
    display: block;
    position: absolute;
    bottom: 0;
    left: 5rpx;
    border-radius: 16rpx;
}
.tab-box {
    background: #F2F2F2;
    height: 100%;
    box-sizing: border-box;
}
.tab-content {
    overflow-y: scroll;
}
.listBg {
    margin: 24rpx 32rpx 0rpx 32rpx;
    background-color: white;
    display: flex;
    flex-direction: column;
}
.itemImg {
    height: 320rpx;
    width: 100%;
}
.itemTitle {
    margin: 24rpx;
    font-size: 28rpx;
    font-weight: 500;
    line-height: 48rpx;
    color: #333333;
}

index.wxml

<view class="container"> 
  <view class="listPar">
  <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" bindtap="switchNav">
                 <view class="nav-item {{currentTab == idx ?'active':''}}" data-current="{{idx}}" bindtap="switchNav">
                       <view>{{navItem.text}}</view>
                    <view class="nav-line {{currentTab == idx ?'active':''}}"></view>
                </view>
            </block>
        </scroll-view>
   <navigator class="more" bindtap="moreTab" url="./more">
            <image class="moreImg" src="../../../image/icon8.png"></image>
        </navigator>
 </view>
目录
相关文章
|
JSON 小程序 JavaScript
微信小程序|Tab标签页
微信小程序|Tab标签页
294 0
|
1月前
|
小程序 JavaScript 前端开发
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
【微信小程序-原生开发】实用教程06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)
35 0
|
9月前
|
小程序 JavaScript
微信小程序模仿分类导航实现多个tab 页
微信小程序模仿分类导航实现多个tab 页
47 0
|
9月前
|
小程序 JavaScript
小程序点击轮播图跳转到tab导航界面
小程序点击轮播图跳转到tab导航界面
78 0
|
9月前
|
小程序 JavaScript
微信小程序实现tab页面切换功能
微信小程序实现tab页面切换功能
62 0
|
小程序 索引
【微信小程序】页面tab栏与页面内容联动
我们可以将整个页面考虑成一个轮播图,tab栏就如同轮播图的那小点点,可以控制网那个页面点击,有了思路就非常的好实现了,这时候就需要阅读官网,了解那个属性可以跟轮播图绑定,从而实现点击滚动,滑动也可以使tab栏随之滚动。
406 1
【微信小程序】页面tab栏与页面内容联动
|
小程序 索引
【微信小程序】实现页面tab切换效果
通过以下的方法实现tab与页面内容联动。
393 0
【微信小程序】实现页面tab切换效果
|
2天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录是一个重要而复杂的问题。
微信小程序作为业务拓展的新渠道,其全栈开发涉及前端与后端的紧密配合。本文聚焦小程序开发中的异常处理与日志记录,从前端的网络、页面跳转等异常,到后端的数据库、API调用等问题,详述了如何利用try-catch及日志框架进行有效管理。同时强调了集中式日志管理的重要性,并提醒开发者注意安全性、性能及团队协作等方面,以构建稳定可靠的小程序应用。
8 1
|
2天前
|
小程序 前端开发 API
微信小程序全栈开发中的多端适配与响应式布局是一种高效的开发模式。
探讨小程序全栈开发中的多端适配与响应式布局,旨在实现统一的用户体验。多端适配包括平台和设备适配,确保小程序能在不同环境稳定运行。响应式布局利用媒体查询和弹性布局技术,使界面适应各种屏幕尺寸。实践中需考虑兼容性、性能优化及用户体验,借助跨平台框架如Taro或uni-app可简化开发流程,提升效率。
7 1
|
8天前
|
小程序 JavaScript 前端开发
微信小程序开发必备前置知识:基本代码构成与语法
【8月更文挑战第8天】微信小程序的基本代码构成与语法
15 0
微信小程序开发必备前置知识:基本代码构成与语法

热门文章

最新文章