微信小程序实现滚动Tab选项卡


Posted in Javascript onNovember 16, 2020

本文实例为大家分享了微信小程序实现滚动Tab选项卡的具体代码,供大家参考,具体内容如下

微信小程序实现滚动Tab选项卡

最终效果如上。问题:

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

一、wxml结构

tab标题因一排八个,所以使用 scroll-view组件,使其可横向滚动。
tab内容可左右滑动切换,使用swiper组件实现
为了偷懒,所以数据都通过wx:for遍历重复出来。

说明:

1、设置data-current属性用于:点击当前项时,通过点击事件swichNav中处理e.dataset.current取到点击的目标值。
2、swiper组件的current组件用于控制当前显示哪一页
3、swiper组件绑定change事件switchTab,通过e.detail.current拿到当前页

<view >
 <scroll-view scroll-x="true" class="tab-h" scroll-left="{{scrollLeft}}">
  <view class="tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="swichNav">健康</view>
  <view class="tab-item {{currentTab==1?'active':''}}" data-current="1" bindtap="swichNav">情感</view>
  <view class="tab-item {{currentTab==2?'active':''}}" data-current="2" bindtap="swichNav">职场</view>
  <view class="tab-item {{currentTab==3?'active':''}}" data-current="3" bindtap="swichNav">育儿</view>
  <view class="tab-item {{currentTab==4?'active':''}}" data-current="4" bindtap="swichNav">纠纷</view>
  <view class="tab-item {{currentTab==5?'active':''}}" data-current="5" bindtap="swichNav">青葱</view>
  <view class="tab-item {{currentTab==6?'active':''}}" data-current="6" bindtap="swichNav">全部</view>
  <view class="tab-item {{currentTab==7?'active':''}}" data-current="7" bindtap="swichNav">其他</view>
 </scroll-view>
 <swiper class="tab-content" current="{{currentTab}}" duration="300" bindchange="switchTab"
  style="height:{{winHeight}}rpx">
  <swiper-item wx:for="{{[0,1,2,3,4,5,6,7]}}">
   <scroll-view scroll-y="true" class="scoll-h" >
    <block wx:for="{{[1,2,3,4,5,6,7,8]}}" wx:key="*this">
     <view class="item-ans">
      <view class="avatar">
       <image class="img" src="/avatar.png"></image>
      </view>
      <view class="expertInfo">
       <view class="name">欢颜</view>
       <view class="tag">知名情感博主</view>
       <view class="answerHistory">134个回答,2234人听过 </view>
      </view>
      <navigator url="/pages/askExpert/expertDetail" class="askBtn">问TA</navigator> 
     </view>
    </block>
   </scroll-view>
  </swiper-item>
 </swiper>
</view>

二、js部分

微信小程序在开发起来,个人感觉挺像vue的,以数据驱动视图的更新。所以在小程序中,不能直接操作dom,当然也不能使用jquery之类的库。

var app = getApp();
Page({
 data:{
  winHeight:"",//窗口高度
  currentTab:0, //预设当前项的值
  scrollLeft:0, //tab标题的滚动条位置
  expertList:[{ //假数据
   img:"avatar.png",
   name:"欢?",
   tag:"知名情感博主",
   answer:134,
   listen:2234
  }]
 },
 // 滚动切换标签样式
 switchTab:function(e){
  this.setData({
   currentTab:e.detail.current
  });
  this.checkCor();
 },
 // 点击标题切换当前页时改变样式
 swichNav:function(e){
  var cur=e.target.dataset.current;
  if(this.data.currentTaB==cur){return false;}
  else{
   this.setData({
    currentTab:cur
   })
  }
 },
 //判断当前滚动超过一屏时,设置tab标题滚动条。
 checkCor:function(){
  if (this.data.currentTab>4){
  this.setData({
   scrollLeft:300
  })
  }else{
  this.setData({
   scrollLeft:0
  })
  }
 },
 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 
    }); 
   } 
  });
 }, 
 footerTap:app.footerTap
})

三、wxss样式

.tab-h{
 height: 80rpx;width: 100%; 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;}
.tab-item{margin:0 36rpx;display: inline-block;}
.tab-item.active{color: #4675F9;position: relative;}
.tab-item.active:after{ content: "";display: block;height: 8rpx;width: 52rpx;background: #4675F9;position: absolute; bottom: 0;left: 5rpx;border-radius: 16rpx;}
.item-ans{ width: 100%;display: flex; flex-grow: row no-wrap;justify-content: space-between; padding: 30rpx;box-sizing: border-box; height: 180rpx;align-items: center;border-bottom: 1px solid #F2F2F2;}
.avatar{width: 100rpx;height: 100rpx;position: relative;padding-right: 30rpx;}
.avatar .img{width: 100%;height: 100%;}
.avatar .doyen{width: 40rpx;height: 40rpx;position: absolute;bottom: -2px;right: 20rpx;}
.expertInfo{font-size: 12px;flex-grow: 2;color: #B0B0B0;line-height: 1.5em;}
.expertInfo .name{font-size: 16px;color:#000;margin-bottom: 6px;}
.askBtn{ width: 120rpx;height: 60rpx;line-height: 60rpx;text-align: center;font-size: 14px; border-radius: 60rpx;border: 1px solid #4675F9; color:#4675F9;}
.tab-content{margin-top: 80rpx;}
.scoll-h{height: 100%;}

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript基础的动画教程,直观易懂
Jan 10 Javascript
jquery下div 的resize事件示例代码
Mar 09 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
JavaScript中的函数声明和函数表达式区别浅析
Mar 27 Javascript
详解vue.js2.0父组件点击触发子组件方法
May 10 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 Javascript
总结4个方面优化Vue项目
Feb 11 Javascript
vue按需加载实例详解
Sep 06 Javascript
javascript中的with语句学习笔记及用法
Feb 17 Javascript
微信小程序实现购物车小功能
Dec 30 Javascript
如何理解Vue简单状态管理之store模式
May 15 Vue.js
小程序实现tab标签页
Nov 16 #Javascript
vue+Element-ui实现登录注册表单
Nov 17 #Javascript
Vue+Element-U实现分页显示效果
Nov 15 #Javascript
vue+Element-ui前端实现分页效果
Nov 15 #Javascript
vue+Element-ui实现分页效果
Nov 15 #Javascript
vue实现抽屉弹窗效果
Nov 15 #Javascript
vue项目中js-cookie的使用存储token操作
Nov 13 #Javascript
You might like
制作美丽的拉花
2021/03/03 冲泡冲煮
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
php目录操作实例代码
2014/02/21 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
PHP实现八皇后算法
2019/05/06 PHP
PHP7 windows支持
2021/03/09 PHP
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
JS实现按钮控制计时开始和停止功能
2017/07/27 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
连接Python程序与MySQL的教程
2015/04/29 Python
简单介绍Python中的round()方法
2015/05/15 Python
python Tkinter版学生管理系统
2019/02/20 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
淘宝店铺营销方案
2014/02/13 职场文书
捐款倡议书
2014/04/14 职场文书
捐资助学倡议书
2014/04/15 职场文书
建筑节能汇报材料
2014/08/22 职场文书
投资申请报告
2015/05/19 职场文书