微信小程序实现滚动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弹出层代码
Sep 24 Javascript
JavaScript面向对象编程入门教程
Apr 16 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
全面解析Bootstrap排版使用方法(标题)
Nov 30 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
May 25 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
Apr 25 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
vue中promise的使用及异步请求数据的方法
Nov 08 Javascript
JS实现简单随机3D骰子
Oct 24 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
浅谈Vue的computed计算属性
Mar 21 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
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
Javascript 篱式条件判断
2008/08/22 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
python实现计算倒数的方法
2015/07/11 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
缓刑人员的思想汇报
2014/01/11 职场文书
运动会新闻稿
2015/07/17 职场文书
采购员工作总结范文
2015/08/12 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
5行Python代码实现一键批量扣图
2021/06/29 Python
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
Python经常使用的一些内置函数
2022/04/11 Python