import React, { Component } from 'react'
import { View, Text, ScrollView } from '@tarojs/components'
import { createSelectorQuery } from '@tarojs/taro'
import './index.scss' const tabList = [{name: '头', value: 'header'},{name: '内容',value: 'content'},{name: '底部', value: 'footer'}]
export default class Index extends Component {
state ={
activeStatus: 'header',
heightArr: [],
activeIndex:0
}
handleTab(value, index) {
this.setState({
activeStatus: value,
activeIndex: index
})
}
handleScroll({detail}) {
let heightArr = []
let number = 0
// 获取节点距离容器顶部的高度
tabList.map(item => {
createSelectorQuery().select(`#${item.value}`).boundingClientRect(res => {
number = res.height + number
heightArr.push(number)
this.setState({
heightArr: heightArr
})
}).exec()
}) // 根据滚动定位节点
const scrollTop = Math.ceil(detail.scrollTop)
const { heightArr:scrollArr } = this.state
this.state.heightArr.map((item, index) => {
if(scrollTop >= 0 && scrollTop < scrollArr[0]) {
// 第一个
this.setState({activeIndex: 0})
}
if(scrollTop >= scrollArr[index - 1] && scrollTop <= scrollArr[index]) {
// 第N个
this.setState({activeIndex: index})
}
}) }
render () {
const { activeStatus,activeIndex } = this.state
return (
<View className='index'>
<View className='tabList'>
{tabList.map((item, index) => (
<View onClick={this.handleTab.bind(this, item.value, index)} key={item.value} className={`tab-item ${index===activeIndex && 'active'}`}>{item.name}</View>
))}
</View>
<ScrollView style={{height: '400px'}} scrollY scrollWithAnimation scrollIntoView={activeStatus} onScroll={this.handleScroll.bind(this)}>
<View id='header'>
<View style={{height: '600px'}}>头</View>
</View>
<View id='content'>
<View style={{height: '150px'}}>内容</View>
</View>
<View id='footer'>
<View style={{height: '3000px'}}>底部</View>
</View>
</ScrollView>
</View>
)
}
}

Taro 滚动切换tab页的更多相关文章

  1. 切换tab页

    //切换Tab页        $('#tt').tabs({               border:false,               onSelect:function(title){ ...

  2. 切换tab页时,tab页中的echart变形问题

    本文为博主原创,未经允许,不得转载: 在两个tab页中,分别展现了两个echart图表,同样的格式与写法,但只有在默认选中的tab页中的图表显示的是正常的, 但进入另一个tab页中时,图表则产生了变形 ...

  3. angularjs 切换tab页的一个方法

    tab条的 css: .floor-tab-li { float: left; padding: 6px 12px; font-size: 14px; font-weight: normal; lin ...

  4. 防止tab页重复的去请求服务端

    直接看图吧. 左边是企业树,右边是依据企业变化的一个tab页 实现功能:1.我们希望假设选中的企业不变,我们在切换旁边五个tab页的时候,仅仅是第一次进去的时候请求server端.以下来回切换tab页 ...

  5. 用CSS实现Tab页切换效果

    用CSS实现Tab切换效果 最近切一个页面的时候涉及到了一个tab切换的部分,因为不想用js想着能不能用纯CSS的选择器来实现切换效果.搜了一下大致有下面三种写法. 利用:hover选择器 缺点:只有 ...

  6. jquery实现tab页切换显示div

    1.jQuery实现tab切换显示代码实现 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &q ...

  7. ECSHOP:首页实现显示子分类商品,并实现点击Tab页切换分类商品

    例子:首页实现显示子分类商品,并实现点击Tab页切换分类商品(非AJAX) 开始:    1. 打开调试开关     文件地址:include/cls_template.php 找到 : functi ...

  8. Tab页签切换

    js之tab页签切换效果       现在web网站,很多地都需要用到tab页签. 示例:         $(document).ready(function(){               va ...

  9. tab页切换

    做了一个tab页切换.点击不同tab,显示对应的内容信息 如图 =================HTML===================== <!doctype html public ...

  10. 小技巧之Selenium如何切换到弹出的Tab页中

    今天群里讨论了一个问题,如何将selenium的操作焦点切换到浏览器中新弹出来的Tab页中,正好对应到了昨天的那篇文章“小技巧之在浏览器中打开新的页签”.今天就带大家来解决这个问题: 先封装一个Tab ...

随机推荐

  1. C#中的对象深拷贝和浅拷贝

    目录 C#中的对象深拷贝和浅拷贝 概述 1. 浅拷贝 2. 深拷贝 总结 引用 C#中的对象深拷贝和浅拷贝 概述 在C#中,对象拷贝是指将一个对象的副本创建到另一个对象中.对象拷贝通常用于数据传输或创 ...

  2. cesium教程4-用entity加载glb和gltf格式的小模型

    示例完整代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装

    前言 出现有需要打包 Java 应用和 Mysql数据库成一个安装包给出去的需求,这里我把整个打包的流程整理一下. 环境 JDK17; MySQL 5.7; 流程 Jpackage打包EXE Jpac ...

  4. 5G MEC 之本地分流实现方式

    目录 文章目录 目录 前言 LADN ULCL IPv6 Multi-homing(BP) 典型应用场景 前言 最近同事发表了一片非常棒的文章,笔者在此之上进行了补充,转发至此与大家分享. 本地分流作 ...

  5. ETSI GS MEC 013,UE 位置 API

    目录 文章目录 目录 版本 功能理解 Relation with OMA APIs Relation with OMA API for Zonal Presence Relation with OMA ...

  6. Python:Python对象模型与序列迭代陷阱

    1. Python对象模型与浅拷贝/深拷贝 1.1 Python对象模型和引用 在我们讲解Python的序列修改陷阱之前,先巩固一下Python的对象模型和浅拷贝/深拷贝的知识. 众所周知,Pytho ...

  7. npm 安装 sass 引用

    1.npm install node-sass --save-dev 2.npm install sass-loader --save-dev npm i less-loader  --save-de ...

  8. MLP实现波士顿房屋价格回归任务

    1. 数据集 波士顿房屋价格.csv文件,文件中的数据有可能不完整,部分数据如下: CRIM, ZN ,INDUS ,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,LSTAT ...

  9. tkinter的Text组件设置禁止编辑

    完整代码: from tkinter import * import requests window = Tk() window.geometry('1000x500+300+100') window ...

  10. wpf 双屏显示问题

    // 在WPF中处理双屏显示问题,通常需要确保应用程序能够识别两个显示器,并在每个显示器上正确渲染内容.以下是一个简化的示例,展示如何在WPF应用程序中设置窗口,使其跨越两个显示器:   using ...