当前位置: 首页 > news >正文

react tab选项卡吸顶实现

react  tab选项卡吸顶实现,直接上代码(代码有注释)

tsx代码

/* eslint-disable react-hooks/exhaustive-deps */
import React, { useEffect, useState } from "react";
import DocumentTitle from 'react-document-title'
import styles from './styles.module.less'// 双旦活动
const Holiday: React.FC<any> = () => {const tabList = [{label:'礼物榜单',value:0},{label:'圣诞活动',value:1},{label:'元旦活动',value:2}]const [active,setactive] = useState<number>(0)const [isFixed,setisFixed] = useState<boolean>(false)//获得页面向左、向上卷动的距离const getScroll = () => {return {left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0};}useEffect(() => {const btnList = document.getElementById('btnList')const offsetTop = btnList?.offsetTop || 0  // offsetTop:元素到offsetParent顶部的距离(当前元素顶部距离最近父元素顶部的距离)window.onscroll = function() {if(getScroll().top >= offsetTop){  // 判断滚动高度是否大于等于 btnList的offsetTopsetisFixed(true)   // 用于判断是否给btnList动态设置style}else{setisFixed(false)}}}, [])return (<DocumentTitle title='双旦活动'><div className={styles.Holiday}><div className={styles.top}><div className={styles.btnList} id="btnList" style={isFixed ? { zIndex: "999",top: "0",position: "fixed", backgroundColor: "#fff" } : {}}>{tabList.map((item:any) => (<div onClick={()=> setactive(item.value)} key={item.value}className={active === item.value ? styles.acitve : ''}>{item.label}</div>))}</div></div><div className={styles.center}><div className={styles.centerBox}><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div><div>双旦活动</div></div></div></div></DocumentTitle>)
}
export default Holiday;

less代码

.Holiday {width: 100%;height: 100%;position: relative;display: flex;flex-direction: column;.top{width: 100vw;height: 590px;background: url('../../assets/toplistbg.png') no-repeat;background-size: 100%;position: relative;.btnList{width: 100vw;padding: 20px 37px;box-sizing: border-box;position: absolute;bottom: 28px;height: 120px;display: flex;justify-content: space-between;bottom: 20px;>div{&.acitve{background: rgba(1, 50, 82, 1);color: #fff;}width: 212px;height: 80px;background: rgba(1, 50, 82, 0.1);border-radius: 40px;font-size: 30px;color: #333;display: flex;align-items: center;justify-content: center;font-family: PingFangSC-Regular, PingFang SC;font-weight: 400;}}}.center{width: 100vw;padding: 24px;box-sizing: border-box;.centerBox{width: 100%;background: #044067;border-radius: 20px;box-sizing: border-box;padding: 30px 28px;>div{color: #fff;font-size: 30px;text-align: center;line-height: 80px;}}}
}

效果展示

相关文章:

  • 力资源视角的数字化应用
  • 01背包问题 刷题笔记
  • 排序算法:插入排序和希尔排序
  • 阿里云服务器怎么使用?3分钟搭建网站教程2024新版
  • 【设计模式】工厂模式与抽象工厂模式
  • SEO关键词策略:如何选取最适合你网站的关键词?
  • 一个简单的回调函数
  • IOS开发0基础入门UIkit-1cocoapod安装、更新和使用 , 安装中出现的错误及解决方案 M1或者M2安装cocoapods
  • javaSE-----继承和多态
  • 地平线零之曙光图文攻略,地平线零之曙光在MAC电脑能玩吗
  • vue2 element 实现表格点击详情,返回时保留查询参数
  • Windows Docker 部署 MySQL
  • 【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
  • 基于JavaWEB SpringBoot婚纱影楼摄影预约网站设计和实现
  • 【打工日常】使用docker部署IT运维管理平台CAT
  • [NodeJS] 关于Buffer
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript类型识别
  • JavaScript中的对象个人分享
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • 初识 webpack
  • 二维平面内的碰撞检测【一】
  • 汉诺塔算法
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 微信小程序开发问题汇总
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • PostgreSQL之连接数修改
  • 第二十章:异步和文件I/O.(二十三)
  • ​第20课 在Android Native开发中加入新的C++类
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #include
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (TOJ2804)Even? Odd?
  • (八十八)VFL语言初步 - 实现布局
  • (四)linux文件内容查看
  • (一)Linux+Windows下安装ffmpeg
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)Mysql的优化设置
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Family_物联网
  • .net Application的目录
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 调用php,php 调用.net com组件 --
  • .NET 分布式技术比较
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .Net小白的大学四年,内含面经
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @RequestBody的使用
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [Codeforces] combinatorics (R1600) Part.2
  • [ERROR] ocp-server-ce-py_script_start_check-4.2.1 RuntimeError: ‘tenant_name‘
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [IE编程] 如何在IE8 下调试BHO控件/工具栏(调试Tab进程)
  • [LeeCode]-Divide Two Integers 不用乘除的除法运算