微信小程序tab左右滑动切换功能的实现代码


Posted in Javascript onFebruary 08, 2021

效果图:

微信小程序tab左右滑动切换功能的实现代码

一、简介

自己的小程序需要实现这样的功能

1.核心思想

swiper 和scroll-view共用两个变量currentTab  navScrollLeft,当点击nav或者滑动swiper时设置两个变量的值为当前的index

二、实现

tab导航栏使用<scroll-view>标签,内容使用<swiper>

1.wxml实现

<view class="container">
 <!-- tab导航栏 -->
 <!-- scroll-left属性可以控制滚动条位置 -->
 <!-- scroll-with-animation滚动添加动画过渡 -->
 <!-- 
  scroll-x="true"
  navScrollLeft: 0初值
  navData:tab text
  使用 wx:for-item 可以指定数组当前元素的变量名,
  使用 wx:for-index 可以指定数组当前下标的变量名:
  -->

  <!--tabs -->
 <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">
   <!-- 判断是否选中,选中设置样式 -->
   <!-- switchNav -->
   <view class="nav-item {{currentTab == idx ?'active':''}}" data-current="{{idx}}" bindtap="switchNav">
    {{navItem.text}}</view>
  </block>
 </scroll-view>


 <!-- 页面内容 -->
 <!-- duration="300":滑动动画时长 -->
 <!-- switchTab -->
 <swiper class="tab-box" current="{{currentTab}}" duration="300" bindchange="switchTab">
  <swiper-item wx:for="{{[0,1,2,3,4,5,6]}}" wx:for-item="tabItem" wx:for-index="idx" wx:key="idx"
   class="tab-content">
   {{tabItem}}
  </swiper-item>
 </swiper>
</view>

2.js实现

//index.js
//获取应用实例
const app = getApp()

Page({
 data: {
  navData:[
   {
    text: '新闻'
   },
   {
    text: '表白'
   },
   {
    text: '外卖'
   },
   {
    text: '当家教'
   },
   {
    text: '找家教'
   },
   {
    text: '租房子'
   },
   {
    text: '驾校'
   }
  ],
  currentTab: 0,
  navScrollLeft: 0
 },
 //事件处理函数
 onLoad: function () {
  
 },
 switchNav(event){
  // 获取当前tab 的id
  var cur = event.currentTarget.dataset.current; 
  //每个tab选项宽度占1/5
  var singleNavWidth = this.data.windowWidth / 5;

  //tab选项居中       
  this.setData({
   navScrollLeft: (cur - 2) * singleNavWidth
  }) 
  // 判断id是否和点击的tab id 一致 
  if (this.data.currentTab == cur) {
   return false;
  } else {
   this.setData({
    currentTab: cur
   })
  }
 },
 
 switchTab(event){
  var cur = event.detail.current;
  var singleNavWidth = this.data.windowWidth / 5;
  this.setData({
   currentTab: cur,
   navScrollLeft: (cur - 2) * singleNavWidth
  });
 }
})

3.wxss实现

/**index.wxss**/
page {
 width: 100%;
 height: 100%;
}

.container {
 width: 100%;
 height: 100%;
}

.nav {
 /* 设置tab-nav宽高度 */
 height: 80rpx;
 width: 100%;

 /* 假如您需要并排放置两个带边框的框,
 可通过将 box-sizing 设置为 "border-box"。 */
 box-sizing: border-box;

 overflow: hidden;

 /* 居中 */
 line-height: 80rpx;

 background:
 #f7f7f7;

 font-size: 16px;

 /* 规定段落中的文本不进行换行: */
 white-space: nowrap;

 position: fixed;
 top: 0;
 left: 0;
 z-index: 99;
}

.nav-item {
 width: 20%;
 display: inline-block;
 text-align: center;
}

.nav-item.active {
 color:
 green;
}

.tab-box {
 background:
 rgb(31, 201, 96);
 /* 这里设置成nav的高度 */
 padding-top: 80rpx;
 height: 100%;
 box-sizing: border-box;
}

.tab-content {
 /* 裁剪 div 元素中内容的左/右边缘 - 如果溢出元素的内容区域的话: */
 overflow-y: scroll;
}

三、参考和总结

此文章参考 https://3water.com/article/169290.htm

解决过程
1.tab的宽度固定为1/5,可以改进成根据tab的内容变化

四、优化

0.效果图

微信小程序tab左右滑动切换功能的实现代码

1.每个tab长度自适应 2.先前隔tab点击时

如果当前处于1,点击3时,路径时1-2-3,真机测试后,会直接跳转3,不会影响体验

// *******************************导航栏选择获取id和导航栏的位置**************************************
 tabSelect(e) {
 console.log("结果:", e);
 // 操作新闻数据库
 var cur = e.currentTarget.dataset.id;
 //tab选项居中 
 this.setData({
  // 每一个tab的id
  TabCur: e.currentTarget.dataset.id,
  
  //自适应
  scrollLeft: (e.currentTarget.dataset.id) * 60,
 })

 // 判断id是否和点击的tab id 一致 
 if (this.data.currentTab == cur) {
  return false;
 } else {
  this.setData({
  currentTab: cur
  })
 }
 console.log(e.currentTarget.dataset.id);
 console.log(this.data.TabCur);
 console.log("横向滚动条位置", this.data.scrollLeft);
 },
 switchTab(e) {
 console.log(e);
 var cur = e.detail.current;
 this.setData({
  TabCur: cur,
  scrollLeft: cur * 60,
 });
 }

到此这篇关于微信小程序tab左右滑动切换功能的实现代码的文章就介绍到这了,更多相关小程序tab滑动切换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中this关键字使用方法详解
Mar 08 Javascript
IE6弹出“已终止操作”的解决办法
Nov 27 Javascript
Javascript中 关于prototype属性实现继承的原理图
Apr 16 Javascript
js浮动图片的动态效果
Jul 10 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 Javascript
javascript制作sql转换为stringBuffer的小工具
Apr 03 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
原生JS实现在线问卷调查投票特效
Jan 03 Javascript
详解基于angular-cli配置代理解决跨域请求问题
Jul 05 Javascript
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
Node 模块原理与用法详解
May 13 Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 #Javascript
原生js 实现表单验证功能
Feb 08 #Javascript
js面向对象封装级联下拉菜单列表的实现步骤
Feb 08 #Javascript
JavaScript实现点击出现子菜单效果
Feb 08 #Javascript
深入理解javascript中的this
Feb 08 #Javascript
Vue中使用wangeditor富文本编辑的问题
Feb 07 #Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 #Vue.js
You might like
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
img标签中onerror用法
2009/08/13 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
nodejs实现截取上传视频中一帧作为预览图片
2017/12/10 NodeJs
vue.js在标签属性中插入变量参数的方法
2018/03/06 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
应用心理学个人求职信范文
2013/12/11 职场文书
怎样写演讲稿
2014/01/04 职场文书
高中军训第一天感言
2014/03/06 职场文书
养成教育经验材料
2014/05/26 职场文书
体育课外活动总结
2014/07/08 职场文书
工程造价专业求职信
2014/07/17 职场文书
优秀教师单行材料
2014/12/16 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
读《儒林外史》有感:少一些功利,多一些真诚
2020/01/19 职场文书