微信小程序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 相关文章推荐
jQuery操作checkbox选择(list/table)
Apr 07 Javascript
详解堆的javascript实现方法
Nov 29 Javascript
javascript中this关键字详解
Dec 12 Javascript
jQuery内容筛选选择器实例代码
Feb 06 Javascript
详解RequireJS按需加载样式文件
Apr 12 Javascript
jquery请求servlet实现ajax异步请求的示例
Jun 03 jQuery
Node.js 回调函数实例详解
Jul 06 Javascript
react router 4.0以上的路由应用详解
Sep 21 Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 Javascript
js实现简单扫雷
Nov 27 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 Javascript
JS数组索引检测中的数据类型问题详解
Jan 11 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
浅谈php的TS和NTS的区别
2019/03/13 PHP
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
Python中计算三角函数之cos()方法的使用简介
2015/05/15 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
python实现两个文件夹的同步
2019/08/29 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python json格式化打印实现过程解析
2020/07/21 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
《我的第一本书》教学反思
2014/02/15 职场文书
企业员工培训感言
2014/02/26 职场文书
超越自我演讲稿
2014/05/21 职场文书
素质教育标语
2014/06/27 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
道歉信范文
2015/05/12 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python