前端小案例,用锚点(哈希值)实现Tab组件切换

8d6980aa681124455c822112a8c9f46e.jpeg


在前端开发的世界里,使用现代化的技术和方法来实现常见的组件是非常重要的。今天,我们将通过一个具体的案例来展示如何使用现代化的CSS和ES6来创建一个优雅且功能丰富的Tab组件。本文将详细介绍实现思路、代码分析,并提供一些实用的开发技巧。

案例展示:Tab组件

让我们先来看一下这个Tab组件的效果。这个组件包含四个标签页:Analytics(分析)、Reports(报告)、Performance(表现)和Funds(基金)。每个标签页展示不同的内容,点击不同的标签,页面内容会平滑切换。

这个Tab组件主要功能包括:

  1. 标签页切换:点击不同标签时,内容区平滑切换。

  2. URL哈希定位:通过URL哈希值实现页面加载时直接跳转到对应标签页。

  3. 响应式设计:使用现代化CSS确保组件在不同屏幕尺寸下表现良好。

实现思路

如何确定HTML结构

首先,我们需要思考这个Tab组件的基本结构。一个完整的Tab组件应该包含哪些部分?标签列表和内容区域是最基本的两个部分,我们该如何用HTML标签来表示?

  • 标签列表可以使用<ul><li>标签来表示,每个标签使用<a>标签包裹,以便点击。

  • 内容区域用<div><article>标签来表示,每个标签页的内容放在单独的<article>标签内。

代码示例

<div class="tabs-container"><ul class="tabs"><li><a id="tab1" title="Analytics" href="#tab1">Analytics</a></li><li><a id="tab2" title="Reports" href="#tab2">Reports</a></li><li><a id="tab3" title="Performance" href="#tab3">Performance</a></li><li><a id="tab4" title="Funds" href="#tab4">Funds</a></li></ul><div class="tab-content-wrapper"><article id="tab1" class="tab-content"><h2>Analytics</h2><p>Investment analytics involves the use of data, statistical techniques, and financial models to evaluate and optimize investment decisions.</p></article><!-- 其他标签页内容省略 --></div>
</div>

如何设计CSS样式

确定了基本结构后,我们需要思考如何用CSS来美化这个组件。我们希望标签能有一个漂亮的外观,内容区在切换时有平滑的过渡效果,还需要考虑响应式设计,以适应不同屏幕尺寸。

  • 使用CSS变量来定义颜色和其他样式参数,方便统一管理和修改。

  • 使用Flexbox布局,使标签列表和内容区域具有良好的响应性。

  • 为标签和内容区域添加过渡效果,使切换时更加平滑。

如何添加JavaScript交互逻辑

最后,我们需要为这个组件添加交互功能。当用户点击不同的标签时,内容区应该切换到相应的内容。我们该如何实现这一点?

  • 使用querySelectorAll获取所有标签和内容区域的DOM元素。

  • 为每个标签添加点击事件监听,切换内容区域的显示状态。

  • 使用window.location.hash来处理页面加载时的标签定位,确保刷新后还能停留在用户选择的标签页。

源码分析

HTML

HTML部分的代码主要定义了Tab组件的基本结构,包括标签列表和内容区域。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Widget</title><meta name="viewport" content="width=device-width, initial-scale=1.0"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet" type='text/css'><link rel="stylesheet" type="text/css" href="style.css">
</head><body><div class="tabs-container"><ul class="tabs"><li><a id="tab1" title="Analytics" href="#tab1"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="24" height="24"viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M3 3v18h18"></path><path d="M20 18v3"></path><path d="M16 16v5"></path><path d="M12 13v8"></path><path d="M8 16v5"></path><path d="M3 11c6 0 5 -5 9 -5s3 5 9 5"></path></svg>Analytics</a></li><!-- 省略--></ul><div class="tab-content-wrapper"><article id="tab1" class="tab-content"><h2>Analytics</h2><p>Investment analytics involves the use of data, statistical techniques, and financial models toevaluate and optimize investment decisions.</p><img src="assets/analytics.png" alt="Analytics"></article><!-- 省略--></div></div><script src="script.js"></script>
</body></html>
  • <div class="tabs-container">:外层容器,包裹整个Tab组件。

  • <ul class="tabs">:无序列表,包含多个标签。

  • <li><a id="tab1" title="Analytics" href="#tab1">Analytics</a></li>:每个标签由<li><a>标签组成,<a>标签的href属性用于指向对应的内容区域。

  • <div class="tab-content-wrapper">:内容区域的容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25 防火墙基础操作

1 防火墙进入WEB页面操作 华三防火墙的默认用户:admin/密码:admin 将IP地址改在同一网段的信息 在防火墙的管理地址 GE/0/0/1&#xff1a;192.168.0.1 主机的地址是:192.168.0.101 思考一下为什么Ping不通 security-zone name Management import interface GigabitEthernet1/…

音视频开发34 FFmpeg 编码- 将h264和acc文件打包成flv文件

FFmpeg合成流程 示例本程序会⽣成⼀个合成的⾳频和视频流&#xff0c;并将它们编码和封装输出到输出⽂件&#xff0c;输出格式是根据⽂件 扩展名⾃动猜测的。 示例的流程图如下所示。 ffmpeg 的 Mux 主要分为 三步操作&#xff1a; avformat_write_header &#xff1a; 写⽂…

Qt WPS(有源码)

项目源码地址&#xff1a;WPS完整源码 一.项目详情 该项目仿照WPS&#xff0c;实现了部分的功能&#xff0c;能够很方便对文本和HTML进行修改&#xff0c;并且有打印功能&#xff0c;可以很方便的生成PDF。 应用界面 项目架构分析 这个项目主要可分为两个部分&#xff0c;一…

使用RNN模型构建人名分类器

使用RNN模型构建人名分类器 1 项目需求和实现分析 短文本分类问题 2 数据处理三部曲 场景1&#xff1a;数据处理三部曲示意图 场景2&#xff1a;三个字母onehot编码形状分析 3 构建RNN模型 4 构建训练函数并进行训练 - 有关模型、损失函数、优化器三者在pytorch中的表示 5…

叶老师的新水杯c++

题目描述 最近叶老师换了个带吸管的水杯。 贝贝发现当叶老师使用带吸管的水杯时&#xff0c;每天会喝 x 毫升的水。而使用不带吸管的水杯时&#xff0c;每天会喝 y 毫升的水。 请问在 n 天的时间内&#xff0c;叶老师喝水量的上限与下限相差多少&#xff1f; 输入 第一行为…

聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎(一)

Scrapy综述 Scrapy总体架构 Scrapy架构图(绿线是数据流向) 适用于海量静态页面的数据下载 Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯&#xff0c;信号、数据传递等。 Scheduler(调度器): 它负责接受引擎发送过来的Request请求&…

ELK 企业实战7

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

FastAPI教程——部署

部署 部署FastAPI应用程序相对容易。 部署是什么意思 部署应用程序意味着执行必要的步骤以使其可供用户使用。 对于Web API来说&#xff0c;通常涉及将上传到云服务器中&#xff0c;搭配一个性能和稳定性都不错的服务器程序&#xff0c;以便你的用户可以高效地访问你的应用…

智慧校园-报修管理系统总体概述

智慧校园报修管理系统是专为优化教育机构内部维修报障流程而设计的信息化解决方案&#xff0c;它通过集成现代信息技术&#xff0c;为校园设施的维护管理带来革新。该系统以用户友好和高效运作为核心&#xff0c;确保了从报修请求提交到问题解决的每一个步骤都顺畅无阻。 师生或…

分享画布绘制矩形

简介 实现功能&#xff0c;在画布上绘制矩形&#xff0c;移动矩形。 在线演示 绘制矩形 实现代码 <!DOCTYPE html><html><head> <title>绘制矩形</title> </head><body><div style"margin: 10px"><input typ…

FastDFS部署

版本介绍 安装fastdfs共需要俩个安装包 fastdfs-5.05.tar.gz libfastcommon-1.0.7.tar.gz编译安装 libfastcommon tar -xvf libfastcommon-1.0.7.tar.gz cd libfastcommon-1.0.7 make.sh make.sh install 3. 设置软链接 libfastcommon.so默认安装到了/usr/lib64/libfastcommon.…

5-linux文件路径与文件目录系统

目录 ①文件路径 目录跳转 绝对路径与相对路径 ②文件目录系统 目录系统组成 目录命名规则 命令补充 ls命令补充 file filename查看文件类型 less查看文本文件 ①文件路径 目录跳转 pwd:查看当前工作目录。 cd:改变目录。 ls:列出目录内容。 [root########## ~]# …

某易六月实习笔试

第一题 下面代码需要更改的地方已指出。 解题思路 模拟题&#xff0c;用双指针记录双方当前式神&#xff0c;再记录一下当前谁先手&#xff0c;直到有一方指针越界。 把下面代码now1变为now(now1)%2就行。 第二题 解题思路 01背包变种&#xff0c;只是背包的容量变为多个维度…

CLAY或许是今年最值得期待的3D生成模型,号称质量最好+布线最好+支持的输入模态最多+支持材质生成。

CLAY是一种大规模可控生成模型,用于创建高质量的3D资产,它结合了多分辨率变分自编码器和简化的潜在扩散变压器,通过多种输入形式生成详细的3D几何结构和物理渲染材质。 CLAY或许是今年最值得期待的3D生成模型,号称质量最好+布线最好+支持的输入模态最多+支持材质生成。 相…

vue2+three.js实现火焰效果

// 火焰getFireMaterial() {const vertex ${ShaderChunk.logdepthbuf_pars_vertex} bool isPerspectiveMatrix(mat4) {return true; } varying vec4 m_pos; varying vec2 vUv; varying vec3 _flame; uniform float uTime; vec2 hash( vec2 p ){p vec2( dot(p,vec2(150.1,350…

EDA期末复习——基础知识

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

SaaS 出海:Databend Cloud 的定位与实践

提到 “SaaS 出海”这个词大家肯定并不陌生&#xff0c;SaaS 企业将业务拓展到海外市场已经成为许多 SaaS 公司的重要战略方向。随着企业对于灵活性、可扩展性以及成本效益需求的不断增长&#xff0c; SaaS 模式提供了理想的解决方案。对于寻求出海机会的 SaaS 企业来说&#x…

神州信息与国科量子联合进军量子网络应用服务市场(中国军民两用通信技术展览会)

量子通信&#xff0c;智联未来 —— 神州信息与国科量子共启安全通信新纪元 在信息技术飞速发展的今天&#xff0c;信息安全已成为全球关注的焦点。神州数码信息服务股份有限公司&#xff08;神州信息&#xff09;与国科量子通信网络有限公司&#xff08;国科量子&#xff09;…

【地理库 Turf.js】

非常全面的地理库 &#xff0c; 这里枚举一些比较常用&#xff0c;重点的功能&#xff0c; 重点功能 提供地理相关的类&#xff1a;包括点&#xff0c;线&#xff0c;面等类。 测量功能&#xff1a;点到线段的距离&#xff0c;点和线的关系等。 判断功能&#xff1a; 点是否在…

phpMyAdmin 4.0.10 文件包含 -> getshell

phpMyAdmin 4.0.10 文件包含 -> getshell 前言&#xff1a;这里这个漏洞相对来说审计起来不是特别难&#xff0c;但是对于初学者还是有点挑战性的&#xff0c;从zkaq web课过来的小伙伴想挑战一下自己代码审计能力的话&#xff0c;可以直接跳到最后下载源码&#xff0c;聂风…