微信小程序实现tabs选项卡
选项卡在我们的日常开发中,使用的还是蛮多的,但是微信小程序中却没有直接提供选项卡组件,不过我们可以变通通过 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选项卡的更多相关文章
- 微信小程序开发之选项卡
选项卡是web开发中经常使用到的一个模块,在小程序中竟然没有,这里参考别人的文章自己做了一个双选项卡 实现思路: 通过绑定swichNav事件来控制currentTab(当前选项卡)和isShow(是 ...
- 微信小程序-滚动Tab选项卡
前言:今天呢 给大家详细讲解一下滚动Tab选项卡:左右可滑动切换的效果,希望对大家做项目时候有用! 以前也遇到过这个,但是没有做记录.转载来源于:https://www.jianshu.com/p/9 ...
- NO--19 微信小程序之scroll-view选项卡与跳转(二)
本篇为大家介绍为何我们在最后做交互的时候,并没有使用上一篇讲的选项卡的效果. scroll-view与跳转.gif (如无法查看图片,还请翻看上一篇!) 大家注意看,在我点击跳转后,首先能看到的是 ...
- 微信小程序滚动Tab选项卡:左右可滑动切换
最终效果如上.问题: 1.tab标题总共8个,所以一屏无法全部显示. 2.tab内容区左右滑动切换时,tab标题随即做标记(active). 3.当active的标题不在当前屏显示时,要使其能显示到当 ...
- NO--15 微信小程序,scroll-view选项卡和跳转
大多数的商城类小程序都有这个功能,点击“全部订单”,“待付款”,“待发货”,“待收货”,“已完成”,会跳转页面且跳至与之相对应的选项卡中.所以我们在开发该小程序时也做了相同的功能.如下图: scr ...
- 转载【微信小程序】:微信小程序滚动Tab选项卡:左右可滑动切换(仿某宝)
1.本文转载至:http://blog.csdn.net/sophie_u/article/details/71745125 2.效果: 3.最终效果如上.问题: 1).tab标题总共8个,所以一屏无 ...
- 微信小程序选项卡功能
首先看看微信小程序上的选项卡的效果 原理呢,就是先布局好(这就不必说了吧),然后在上面的每一个选项卡上都定义一个同样的点击事件,然后给每一个组件上绑定一个唯一的标识符,然后点击事件触发的时候,获取到绑 ...
- 微信小程序开发教程目录
本系列教程是自己在工作中使用到而记录的,没有顺序之分 如有错误之处,请给与指正,也不希望误导了别人 微信小程序开发教程目录 微信小程序之注册和入门 微信小程序之HTTPS请求 微信小程序开发之选项卡 ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
随机推荐
- Linux学习笔记--终端命令
~ 表示用户目录路径 ls 显示当前目录下的文件或目录 -l 列出文件纤细信息l(list) -a 列出当前目录下所有文件及目录, 包含隐藏的a(all) mkdir 创建目录 -p 创建目录 ...
- jsPlumb开发流程设计器
前言 jsPlumb是一款开源软件,但jsPlumb toolkit是收费的. 本文主要使用jsPlumb实现一些简单的流程设计功能. 基础学习 首先引入jsplumb.min.js. <scr ...
- PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法
虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysqli 的属性或方法.就当是扩展一下自己的知识体系. 切换用户 首先就是切换 ...
- canal源码之BooleanMutex(基于AQS中共享锁实现)
在看canal源码时发现一个有趣的锁实现--BooleanMutex 这个锁在canal里面多处用到,相当于一个开关,比如系统初始化/授权控制,没权限时阻塞等待,有权限时所有线程都可以快速通过 先看它 ...
- Java基础系列(11)- 变量、常量、作用域以及变量的命名规范
变量 变量是什么:就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=valu ...
- Nginx系列(10)- Nginx配置文件详解
nginx文件结构 ... #全局块 events { #events块 ... } http #http块 { ... #http全局块 server #server块 { ... #server全 ...
- Linux系列(18) - 常用压缩命令(1)
常用压缩格式 .zip .gz .bz2 .zip格式压缩/解压缩 命令格式 压缩 zip [压缩文件名] [源文件]:压缩文件 zip -r [压缩文件名] [源目录]:压缩目录 解压缩 unzip ...
- python三种导入模块的方法
做为python初学者,有时候搞不清楚导入模块的作用. 直接导入模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py"." ...
- P6775-[NOI2020]制作菜品【贪心,dp】
正题 题目链接:https://www.luogu.com.cn/problem/P6775 题目大意 \(n\)种原材料,第\(i\)个有\(d_i\)个,\(m\)道菜品都需要\(k\)个原料而且 ...
- 从Gartner与IDC三大行业报告,看国产RPA的市场规模与未来发展
从Gartner与IDC三大行业报告,看国产RPA的市场规模与未来发展 Gartner与IDC的三份报告,描绘出中国RPA的市场规模与未来宏图 文/王吉伟 近期的国产RPA,可谓捷报频频.三个重量级行 ...