微信小程序实现滚动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 相关文章推荐
js中几种去掉字串左右空格的方法
Dec 25 Javascript
仿猪八戒网左下角的文字滚动效果
Oct 28 Javascript
浅析JavaScript中两种类型的全局对象/函数
Dec 05 Javascript
javascript内置对象arguments详解
Mar 16 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
Jun 16 Javascript
使用js实现数据格式化
Dec 03 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
jquery replace方法去空格
May 08 jQuery
Vue官方推荐AJAX组件axios.js使用方法详解与API
Oct 09 Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 Javascript
vue-cli4使用全局less文件中的变量配置操作
Oct 21 Javascript
小程序实现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
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
2016/02/03 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
微信小程序开发中的疑问解答汇总
2017/07/03 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
python检测是文件还是目录的方法
2015/07/03 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
物流仓储计划书
2014/01/10 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
党的作风建设心得体会
2014/10/22 职场文书
宾馆客房管理制度
2015/08/06 职场文书
一文解答什么是MySQL的回表
2022/08/05 MySQL