选项卡在我们的日常开发中,使用的还是蛮多的,但是微信小程序中却没有直接提供选项卡组件,不过我们可以变通通过 scroll-view 和 swiper 组件来实现一个选项卡的功能。

需求:

实现一个选项卡,选项卡的标题可能会比较多,当超过一屏时,需要可以滚动显示。选项卡的内容需要左右滑动显示。

实现思路:

1、标题较多,使用 scroll-view 组件来显示即可。
    2、内容滑动,使用 swiper 组件来显示。

效果图:

代码实现:

1、页面布局 tabs.wxml 文件的编写

<view>
<scroll-view scroll-x="{{true}}" class='top-nav-container' scroll-left="{{scrollLeft}}">
<block wx:for="{{topNavs}}" wx:key='{{*this}}'>
<view class='tab-item {{currentActiveNavIndex == index ? "active":""}}' data-current-index='{{index}}' bindtap='topNavChange'>
{{item}}
</view>
</block>
</scroll-view>
<swiper bindchange="swiperChange" class='swiper-container' current='{{currentActiveNavIndex}}' bindtouchmove="touchmove">
<block wx:for="{{topNavs}}" wx:key='{{*this}}'>
<swiper-item style="overflow:scroll">
<view>{{item}}</view>
</swiper-item>
</block>
</swiper>
</view>

注意:

           1、scroll-view scroll-x=true 表示开启横向滚动

           2、scroll-view scroll-left 表示表示横向滚动条的位置

           3、swiper 组件中的 current 表示当前所在滑块的 index,给这个变量赋值,可以直接滑动到这一屏。

2、样式编写 tabs.wxss 文件的编写

.top-nav-container{
width: 100%;
height: 60rpx;
line-height: 60rpx;
font-size: 14px;
background-color: #CCC;
vertical-align: middle;
white-space: nowrap;
} .top-nav-container .tab-item{
display: inline-block;
margin: 0rpx 30rpx;
} .top-nav-container .tab-item.active{
color: rgb(48, 121, 255);
border-bottom: 4rpx solid #F00;
line-height: 52rpx;
} .swiper-container{
height: calc(100vh - 60rpx);
background-color: #00b26a;
font-size: 14px;
}

3、js 控制 tabs.js 文件的编写

Page({
data: {
/**
* 导航数据
*/
topNavs: ['直播', '推荐', '世界杯', '生活', '萌宠', '娱乐', '游戏', '常用', '11111', '22222', '3333', '4444', '5555', '6666'],
/**
* 当前激活的当航索引
*/
currentActiveNavIndex: 0,
/**
* 上一个激活的当航索引
*/
prevActiveNavIndex: -1,
/**
* scroll-view 横向滚动条位置
*/
scrollLeft: 0
},
/**
* 顶部导航改变事件,即被点击了
* 1、如果2次点击同一个当航,则不做处理
* 2、需要记录本次点击和上次点击的位置
*/
topNavChange: function(e) {
var nextActiveIndex = e.currentTarget.dataset.currentIndex,
currentIndex = this.data.currentActiveNavIndex;
if (currentIndex != nextActiveIndex) {
this.setData({
currentActiveNavIndex: nextActiveIndex,
prevActiveNavIndex: currentIndex
});
}
},
/**
* swiper滑动时触发
* 1、prevIndex != currentIndex 表示的是用手滑动 swiper组件
* 2、prevIndex = currentIndex 表示的是通过点击顶部的导航触发的
*/
swiperChange: function(e) {
var prevIndex = this.data.currentActiveNavIndex,
currentIndex = e.detail.current;
this.setData({
currentActiveNavIndex: currentIndex
});
if (prevIndex != currentIndex) {
this.setData({
prevActiveNavIndex: prevIndex
});
}
this.scrollTopNav();
},
/**
* 滚动顶部的导航栏
* 1、这个地方是大致估算的
*/
scrollTopNav: function() {
/**
* 当激活的当航小于4个时,不滚动
*/
if (this.data.currentActiveNavIndex <= 3 && this.data.scrollLeft >= 0) {
this.setData({
scrollLeft: 0
});
} else {
/**
* 当超过4个时,需要判断是向左还是向右滚动,然后做相应的处理
*/
var plus = this.data.currentActiveNavIndex > this.data.prevActiveNavIndex ? 60 : -60;
this.setData({
scrollLeft: this.data.scrollLeft + plus
});
}
console.info(this.data.currentActiveNavIndex, this.data.prevActiveNavIndex, this.data.scrollLeft);
}
})

    注意:

          1、 需要注意的地方可以看代码中的注释

完整代码:

选项卡代码:https://gitee.com/huan1993/weixin_mini_program_study/tree/master/pages/tabs

微信小程序实现tabs选项卡的更多相关文章

  1. 微信小程序开发之选项卡

    选项卡是web开发中经常使用到的一个模块,在小程序中竟然没有,这里参考别人的文章自己做了一个双选项卡 实现思路: 通过绑定swichNav事件来控制currentTab(当前选项卡)和isShow(是 ...

  2. 微信小程序-滚动Tab选项卡

    前言:今天呢 给大家详细讲解一下滚动Tab选项卡:左右可滑动切换的效果,希望对大家做项目时候有用! 以前也遇到过这个,但是没有做记录.转载来源于:https://www.jianshu.com/p/9 ...

  3. NO--19 微信小程序之scroll-view选项卡与跳转(二)

    本篇为大家介绍为何我们在最后做交互的时候,并没有使用上一篇讲的选项卡的效果.   scroll-view与跳转.gif (如无法查看图片,还请翻看上一篇!) 大家注意看,在我点击跳转后,首先能看到的是 ...

  4. 微信小程序滚动Tab选项卡:左右可滑动切换

    最终效果如上.问题: 1.tab标题总共8个,所以一屏无法全部显示. 2.tab内容区左右滑动切换时,tab标题随即做标记(active). 3.当active的标题不在当前屏显示时,要使其能显示到当 ...

  5. NO--15 微信小程序,scroll-view选项卡和跳转

    大多数的商城类小程序都有这个功能,点击“全部订单”,“待付款”,“待发货”,“待收货”,“已完成”,会跳转页面且跳至与之相对应的选项卡中.所以我们在开发该小程序时也做了相同的功能.如下图:   scr ...

  6. 转载【微信小程序】:微信小程序滚动Tab选项卡:左右可滑动切换(仿某宝)

    1.本文转载至:http://blog.csdn.net/sophie_u/article/details/71745125 2.效果: 3.最终效果如上.问题: 1).tab标题总共8个,所以一屏无 ...

  7. 微信小程序选项卡功能

    首先看看微信小程序上的选项卡的效果 原理呢,就是先布局好(这就不必说了吧),然后在上面的每一个选项卡上都定义一个同样的点击事件,然后给每一个组件上绑定一个唯一的标识符,然后点击事件触发的时候,获取到绑 ...

  8. 微信小程序开发教程目录

    本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...

  9. 微信小程序学习指南

    作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

随机推荐

  1. 自定义-starter

    目录 说明 编写启动器 新建项目测试我们自己写的启动器 分析完毕了源码以及自动装配的过程,可以尝试自定义一个启动器来玩玩! 自动装配的过程 SpringBoot-静态资源加载-源码 SpringBoo ...

  2. 记录centos下nl与cat -n的不同

    nl命令列出文件行不包含空格,cat -n包含空格 [root@bogon ~]# cat -n test.txt 1 a 2 aa 3 aaa 4 aaaa 5 aaaaa 6 7 aaaaaa [ ...

  3. vue-cli 项目中使用 v-chart 及导出 chart 图片

    安装: npm i v-charts echarts -S 组件中使用: 1 <template> 2 <div class="app-chart"> 3 ...

  4. Java Web实现登录验证码(Servlet+jsp)

    1.生成验证码图片(Servlet) import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import j ...

  5. 【C++基础教程】第四课

    上次的课后练习 第1题输出: 第二题输出:1 第三题: #include<iostream> #include<cmath> using namespace std; int ...

  6. 一起学习PHP的runkit扩展如何使用

    这次又为大家带来一个好玩的扩展.我们知道,在 PHP 运行的时候,也就是部署完成后,我们是不能修改常量的值,也不能修改方法体内部的实现的.也就是说,我们编码完成后,将代码上传到服务器,这时候,我们想在 ...

  7. SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x90\xA3\xF0\x9F...' for column

    在做微信公众号保存用户数据时出现这种错误,一直不知道是哪里的原因,后来发现那个用户昵称带着一只兔子表情,由于数据库编码限制不能保存数据,所有需要先编码, 用PHP的函数就是base64_encode, ...

  8. synchronized Lock(本地同步)锁的8种情况

    Lock(本地同步)锁的8种情况 总结与说明: * 题目: * 1.标准访问,请问是先打印邮件还是短信 Email * 2.email方法新增暂停4秒钟,请问是先打印邮件还是短信 Email * 3. ...

  9. Linux系列(1) - 使用Hyper-V安装Linux系统

    前言 使用工具:Hyper-V,补充:hyper-v是一项技术,而vmware是一款软件.具体区别自行百度 LINUX版本:CentOS-8.4.2105-x86_64-dvd1.iso Window ...

  10. php nginx 路径批量配置

    * 假设 E:\upload 作为图片上传的位置 nginx 做web服务 * 创建文件conf.php 放到这个目录下 <?php function handleDir($it, &$ ...