组件JS

// components/tag/index.js
Component({options: {multipleSlots: true},lifetimes: {attached: function () {// 在组件实例进入页面节点树时执行let that = thisthis.setData({tabWidth: wx.getSystemInfoSync().windowWidth / 4,tab: this.data.newTab,contentWidth: wx.getSystemInfoSync().windowWidth,}, _ => {that.triggerEvent("changeTab", that.data.currentMeta);})},detached: function () {// 在组件实例被从页面节点树移除时执行},},ready() {this.queryDom(0)this.queryDomFlexd()},/*** 组件的属性列表*/properties: {newTab: {type: Array,value: [{ title: '标签一', meta: 1 },{ title: '标签二', meta: 2 },{ title: '标签三', meta: 3 },{ title: '标签四', meta: 4 },]}},/*** 组件的初始数据*/data: {tab: [],tabWidth: '',lineLeft: '',textWidth: '1',currentMeta: 1,contentWidth: '100%',contentRight: '0',perch: '0'},/*** 组件的方法列表*/methods: {changeTab(e) {let that = thislet { id } = e.currentTarget.datasetthis.queryDom(id - 1)this.changeContent(id - 1)this.setData({currentMeta: id}, _ => {that.triggerEvent("changeTab", id);})},queryDomFlexd() {let that = thisconst query = wx.createSelectorQuery().in(this)query.select('.tag-flexd').boundingClientRect(function (res) {that.setData({perch: res.height,contentHeight: wx.getSystemInfoSync().windowHeight - res.height})}).exec()},queryDom(index = 0) {let that = thisconst query = wx.createSelectorQuery().in(this)query.selectAll('.text').boundingClientRect(function (res) {that.setData({lineLeft: res[index].left,textWidth: res[index].width})}).exec()},changeContent(index = 0) {this.setData({contentRight: index * this.data.contentWidth})}}
})

组件wxml

<!-- components/tag/index.wxml -->
<view class="tag-wrap"><view class="tag-flexd"><view class="tag-head"><view bindtap='changeTab' data-id='{{item.meta}}' class="text-center {{currentMeta==item.meta?'active':'normol'}}" wx:for="{{tab}}" wx:key="key" style="width:{{tabWidth}}px"><text class="text">{{item.title}}</text></view></view><view class="line" style="transform: translateX({{lineLeft}}px);width:{{textWidth}}px"></view></view><view style="height:{{perch}}px"></view><view class="tag-content-wrap" style="width:{{4*contentWidth}}px;transform: translateX(-{{contentRight}}px);"><view class="tag-content-item" wx:for="{{tab}}" wx:key='key' style="width:{{contentWidth}}px;height:{{contentHeight}}px"><slot name='{{item.meta}}'></slot></view></view>
</view>

组件CSS

/* components/tag/index.wxss */
.tag-wrap {overflow: hidden;
}
.tag-wrap .tag-flexd {position: fixed;top: 0;z-index: 999;
}
.tag-wrap .tag-head {display: flex;font-size: 32rpx;
}
.tag-wrap .text-center {text-align: center;
}
.tag-wrap .line {transition: .3s ease all;height: 8rpx;border-radius: 8rpx;background-color: #ee0a24;margin-top: 10rpx;
}
.tag-head .active {font-weight: bold;transition: .3s ease all;color: black;
}
.tag-wrap .normol {color: #646566;
}
.tag-wrap .tag-content-wrap {position: relative;/* width: 400%; */overflow-x: hidden;display: flex;transition: .3s ease all;
}
.tag-wrap .tag-content-item {/* width:100%; */height:100vh;
}

页面调用wxml

<!-- 标签页 -->
<tag newTab='{{temp}}' bindchangeTab='changeTab'><view slot='1'>标签一</view><view slot='2'>标签二</view><view slot='3'>标签三</view><view slot='4'>标签四</view>
</tag>

页面调用JS

// index.js
// 获取应用实例
const app = getApp()Page({data: {show:'none',temp:[{ title: '标签1', meta: 1 },{ title: '标签2', meta: 2 },{ title: '标签3', meta: 3 },{ title: '标签4', meta: 4 },]},changeTab(params){console.log('params',params.detail)},onLoad() {},
})

微信小程序标签页组件相关推荐

  1. A095_day01_微信小程序入门与组件

    目录 微信小程序入门与组件 - Day01 1.内容介绍 2.微信小程序简介(了解) 2.1.什么是小程序 2.2.微信小程序与app的区别 2.3.小程序在入口 2.4.微信小程序的工作原理 2.5 ...

  2. 微信小程序_基础组件学习02

    微信小程序_基础组件学习02 swiper组件 swiper是滑块容器,也就是手机端的轮播图. swiper组件有两部分组成swiper和swiper-item. swiper-item需要放在swi ...

  3. 微信小程序授权登录 组件的封装

    微信小程序授权登录 组件的封装 新建components文件 写wxml文件 wxss部分 js部分 json引用 页面使用 页面js 授权登录 流程如下: 因为多个页面功能需要登录状态 所以做了个组 ...

  4. 分享一个微信小程序编辑页面的WXML模板

    分享一个微信小程序编辑页面的WXML模板 最近在进行微信小程序开发的时候经常会碰到编辑页面的搭建,大致格式如图所示: 顶部:返回按钮和确认按钮,在中间还可以自行加上一些别的元素. 中间部分:编辑的标题 ...

  5. 微信小程序上传组件(可同时长传图片+视频)

    写了个微信小程序上传组件,同时支持上传视频+图片,并且可以返显. 废话不多说,上代码: upload.wxml <view class="clearfix"><v ...

  6. 微信小程序日历签到组件(原创)

    微信小程序日历签到组件(原创) 开发原因: 为满足定制需要,市面上又找不到车子和轮子,干脆自己撸了并开源分享有需要的人用 其他说明: 该组件js日期均已使用yyyy/MM/dd格式连接解决ios不兼容 ...

  7. 微信小程序基于swiper组件的tab切换

    代码地址如下: http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  8. PHP更新小程序,微信小程序Tab页切换更新数据详细介绍

    这篇文章主要介绍了微信小程序 Tab页切换更新数据的相关资料,需要的朋友可以参考下 微信小程序 Tab页切换更新数据 微信小程序还处于内测阶段,最不方便的莫过于官方在不停的更新,前几天写的功能隔个几天 ...

  9. Android 仿微信小程序开屏页加载loading

    Android 仿微信小程序开屏页加载loading 废话不多说,先上效果图~ 首先就是底层有一个灰色的圆,然后按照圆形的轨迹进行绘制. 啊~说那么多也没用,还是直接上代码吧,哈哈哈哈 绘制底部圆形及 ...

最新文章

  1. linux文件每行长度,linux – 根据第一列/行中的字符长度对文件进行排序
  2. 十进制数转为十六进制字符串
  3. EventBus/EventQueue 再思考
  4. setGeometry: Unable to set geometry 493x379+674+326 (frame: 517x443+662+274) on QWidgetWindow/“Dialo
  5. Android多线程操作——线程池管理综述
  6. Nginx - 限制并发、限制访问速率、限制流量
  7. 2013年2月 VB100 测试成绩公布
  8. 微信换头像小程序实现原理及源码
  9. python画图的函数_python画图函数
  10. 高级计算机怎么计算增速,增速的计算公式
  11. 服务器系统事件6013,来源为EventLog 事件 ID:6013类型为信息的系统启动时间为XXXX秒的事件解析...
  12. ROBOMASTER机甲大师赛视觉组学习方案
  13. 安卓数据传递和数据回传简单注册和宠物装备购买
  14. 求两点之间的夹角--两种方法
  15. HCNP学习笔记之OSPF协议原理及配置1-基础知识
  16. python的matplotlib绘图(双坐标轴)
  17. Word文档中如何修改设置行距
  18. 宏转录组方法_Cell:基因表达的改变和群落的更替塑造了全球海洋宏转录组
  19. nginx根据ip限流和突发流量配置解释
  20. 快速入门Tableau系列 | Chapter13【雷达图和凹凸图】

热门文章

  1. AS下如何生成自定义的.jks签名文件, 以及如何生成数字签名
  2. 手写签名转化为电子版
  3. druid数据源下 sqlserver 出现 对象名 'xxx' 无效
  4. requests模块
  5. U3d引擎与资源管理
  6. 浏览器及app消息推送
  7. docker容器不阻塞的进入
  8. 删除的备忘录怎么恢复
  9. VMware界面大小调整两种方法超详细教程
  10. 传奇背词 商业经济类第一篇 消费者该怎么做?