二级页面太多了,放这好记着。
二级页面(Second Page)项目文档
一、项目概述
二级页面(Second Page) 是一个用于集中展示个人项目、实验作品与技术实践记录的静态页面项目。页面以时间轴(按年份)为主线,结合 年份筛选 + 分页机制,实现对多年项目的清晰管理与高可读性展示。
该项目主要服务于:
- 个人技术项目归档
- Web 前端 / PHP 项目展示
- 个人站点的项目索引页(Portfolio / Projects Page)
访问示例:
概览图
桌面端
移动端
二、技术栈说明
1. 前端技术
- HTML5:页面结构与语义化标签
Tailwind CSS v3(CDN):
- 响应式布局
- 原子化样式管理
- 自定义主题色与字体
- Font Awesome 4.7:图标库(导航栏、时间、分页等)
原生 JavaScript(Vanilla JS):
- 年份筛选逻辑
- 项目分页逻辑
- DOM 动态渲染
2. 后端依赖
- 无后端依赖(纯静态页面)
可直接部署于:
- Nginx / Apache
- GitHub Pages
- 任意静态托管平台
三、页面结构说明
1. 页面整体结构
<body>
├─ 顶部导航栏(Nav)
├─ 页面标题区(Title Section)
├─ 项目统计卡片(Project Count)
├─ 年份筛选器(Year Filter)
├─ 项目列表(Project Grid)
├─ 分页组件(Pagination)
└─ 页脚(Footer)2. 导航栏(Nav)
- 固定顶部(sticky)
- 支持桌面端与移动端响应式显示
导航内容:
- 博客主页
- 项目页(当前页)
- 关于页面
3. 页面标题区
包含以下信息:
- 页面主标题(中文)
- 英文副标题(Secondary Page)
- 装饰分割线
- 页面描述性文字(项目理念)
4. 项目统计卡片
- 当前仅保留 项目总数
- 使用卡片样式展示
- 可手动维护或后续改为 JS 自动统计
5. 年份筛选器(核心功能)
支持:
- 全部项目
- 按年份(2019–2026)筛选
- 每个筛选按钮通过
data-year标记年份 点击后:
- 自动重置分页为第一页
- 动态刷新项目列表
示例:
<button class="year-filter" data-year="2025">2025</button>6. 项目列表(Project List)
布局方式
- 桌面端:双栏布局(
md:grid-cols-2) - 移动端:单列布局
单个项目结构
每个项目卡片包含:
- 项目名称(可点击跳转)
- 项目日期
- 项目简要描述
- 技术标签(Tag)
项目通过以下属性参与筛选与分页:
<div class="project-item" data-year="2025"></div>7. 分页组件
- 完全由 JavaScript 动态生成
功能包括:
- 上一页 / 下一页
- 当前页高亮
- 页码自适应项目数量
分页逻辑
- 每页固定显示 6 个项目
- 分页与年份筛选联动
四、JavaScript 逻辑说明
1. 核心配置
const pageSize = 6;
let currentPage = 1;
let filterYear = 'all';2. 年份筛选流程
- 点击年份按钮
- 更新
filterYear - 重置
currentPage = 1 - 调用
renderProjects()
3. 项目渲染流程(renderProjects)
- 根据
data-year过滤项目 - 根据当前页码计算展示区间
- 动态隐藏 / 显示项目卡片
- 重新生成分页按钮
4. 分页按钮生成(renderPagination)
- 自动计算总页数
- 根据当前页添加禁用状态
- 支持页码点击跳转
五、响应式与兼容性
- 完整支持移动端 / 平板 / 桌面端
- 使用 Tailwind 响应式断点
- 兼容主流现代浏览器(Chrome / Edge / Firefox)
六、代码全览
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>二级页面 - 探索与实践的足迹</title>
<!-- Tailwind CSS v3 -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Font Awesome -->
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- 自定义配置 -->
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#3B82F6',
secondary: '#64748B',
success: '#10B981',
warning: '#F59E0B',
dark: '#1E293B',
light: '#F8FAFC'
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
}
}
</script>
<style type="text/tailwindcss">
@layer utilities {
.text-shadow-sm {
text-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
.card-hover {
@apply transition-all duration-300 hover:shadow-lg hover:-translate-y-1;
}
.tag {
@apply inline-block px-2 py-1 text-xs rounded-full mr-2 mb-2;
}
.link-text {
@apply cursor-pointer hover:underline transition-all;
}
.page-active {
@apply bg-primary text-white;
}
.page-disable {
@apply opacity-50 cursor-not-allowed pointer-events-none;
}
}
</style>
</head>
<body class="bg-gray-50 text-gray-800 min-h-screen">
<!-- 顶部导航 -->
<nav class="bg-white shadow-sm sticky top-0 z-10">
<div class="container mx-auto px-4 py-4 flex justify-between items-center">
<a href="#" class="text-xl font-bold text-primary flex items-center">
<i class="fa fa-code-fork mr-2"></i>
<span>二级页面</span>
</a>
<div class="hidden md:flex space-x-6">
<a href="http://mxzfun.xyz/" class="text-gray-600 hover:text-primary transition-colors">博客</a>
<a href="http://mxzfun.xyz/secondpage/secondpage.html" class="text-primary font-medium">项目</a>
<a href="http://mxzfun.xyz/index.php/start-page.html"
class="text-gray-600 hover:text-primary transition-colors">关于</a>
</div>
<button class="md:hidden text-gray-600">
<i class="fa fa-bars text-xl"></i>
</button>
</div>
</nav>
<!-- 主要内容 -->
<main class="container mx-auto px-4 py-8 md:py-12">
<!-- 页面标题 -->
<div class="text-center mb-12">
<h1 class="text-[clamp(2rem,5vw,3rem)] font-bold text-dark mb-2">二级页面</h1>
<p class="text-xl text-gray-500 mb-4">Secondary Page</p>
<div class="w-24 h-1 bg-primary mx-auto mb-6 rounded-full"></div>
<p class="text-lg text-gray-600 max-w-2xl mx-auto">
探索与实践的足迹 · 记录每一次技术探索 · 沉淀每一份实践经验
</p>
</div>
<!-- 统计卡片 - 只保留【项目总数】,已删除开放项目卡片 -->
<div class="mb-12">
<div class="bg-white rounded-xl shadow p-6 text-center card-hover w-full md:w-auto mx-auto">
<div class="text-4xl font-bold text-primary mb-2">15</div>
<div class="text-gray-600">项目总数</div>
</div>
</div>
<!-- 筛选器 - 年份筛选+全部项目 -->
<div class="flex flex-wrap items-center justify-between mb-8">
<div class="text-lg font-medium mb-4 md:mb-0">项目列表</div>
<div class="flex flex-wrap gap-3">
<button class="year-filter px-4 py-2 bg-primary text-white rounded-lg flex items-center active" data-year="all">
<i class="fa fa-th-list mr-2"></i>全部项目
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2026">
<i class="fa fa-calendar mr-2"></i>2026
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2025">
<i class="fa fa-calendar mr-2"></i>2025
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2023">
<i class="fa fa-calendar mr-2"></i>2023
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2022">
<i class="fa fa-calendar mr-2"></i>2022
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2020">
<i class="fa fa-calendar mr-2"></i>2020
</button>
<button
class="year-filter px-4 py-2 bg-white text-gray-700 rounded-lg shadow flex items-center hover:bg-gray-50 transition-colors"
data-year="2019">
<i class="fa fa-calendar mr-2"></i>2019
</button>
</div>
</div>
<!-- 项目列表 - 双栏布局 移动端单列 -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-6" id="project-list">
<!-- 2026 -->
<!-- 项目项 6 - http://mxzfun.xyz/secondpage/secondpage.html -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2026">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://mxzfun.xyz/secondpage/secondpage.html" target="_blank"
class="text-xl font-bold text-dark link-text">二级页面展示</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2026-01-16
</div>
<a href="http://mxzfun.xyz/secondpage/secondpage.html" target="_blank"
class="text-gray-600 mb-4 block link-text">
二级页面太多了,放这好记着。</a>
<div class="flex flex-wrap">
<span class="tag bg-pink-100 text-pink-800">PHP</span>
<span class="tag bg-purple-100 text-purple-800">Tailwind CSS</span>
<span class="tag bg-purple-100 text-purple-800">jQuery</span>
</div>
</div>
</div>
<!-- 2025 -->
<!-- 项目项 6 - http://mxzfun.xyz/GB/fontPage.html -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2025">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://mxzfun.xyz/GB/fontPage.html" target="_blank"
class="text-xl font-bold text-dark link-text">PHP构建实现高斯模糊处理平台</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2025-12-30
</div>
<a href="http://mxzfun.xyz/GB/fontPage.html" target="_blank" class="text-gray-600 mb-4 block link-text">
PHP构建实现高斯模糊处理平台(做这一切的起因是小米的澎湃os太拉了)。</a>
<div class="flex flex-wrap">
<span class="tag bg-pink-100 text-pink-800">PHP</span>
<span class="tag bg-purple-100 text-purple-800">CSS</span>
<span class="tag bg-purple-100 text-purple-800">JavaScript</span>
</div>
</div>
</div>
<!-- 项目项 6 - http://mxzfun.com/videoAll/public/index.php -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2025">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://mxzfun.com/videoAll/public/index.php" target="_blank"
class="text-xl font-bold text-dark link-text">PHP 视频展示插件</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2025-11-08
</div>
<a href="http://mxzfun.com/videoAll/public/index.php" target="_blank"
class="text-gray-600 mb-4 block link-text">
轻量级 PHP 插件,在网页中以网格布局展示视频,支持搜索(以后一定做)、分类过滤、分页和移动端自适应。</a>
<div class="flex flex-wrap">
<span class="tag bg-pink-100 text-pink-800">PHP</span>
<span class="tag bg-purple-100 text-purple-800">CSS</span>
<span class="tag bg-purple-100 text-purple-800">Hack</span>
<span class="tag bg-purple-100 text-purple-800">JavaScript</span>
</div>
</div>
</div>
<!-- 项目项 6 - http://resume.mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2025">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://resume.mxzfun.xyz/" target="_blank" class="text-xl font-bold text-dark link-text">在线简历</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2025-09-17
</div>
<a href="http://resume.mxzfun.xyz/" target="_blank" class="text-gray-600 mb-4 block link-text">
秋招用的,想搞个好的简历吧,木及简历我以前挺喜欢的,但后面他这md语法好像变了,怎么都排版不出我想要的格式
,那再看看其他平台呢,怎么全都要收费,那淘宝呢,真俗套,思来想去,真不如自己搞个页面来,排版?so easy。</a>
<div class="flex flex-wrap">
<span class="tag bg-pink-100 text-pink-800">HTML</span>
<span class="tag bg-purple-100 text-purple-800">CSS</span>
<span class="tag bg-purple-100 text-purple-800">JavaScript</span>
</div>
</div>
</div>
<!-- 项目项 6 - http://ll.mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2025">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://ll.mxzfun.xyz/" target="_blank"
class="text-xl font-bold text-dark link-text">LoveLive数据库</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2025-07-02
</div>
<a href="http://ll.mxzfun.xyz/" target="_blank"
class="text-gray-600 mb-4 block link-text">后台管理是给弱者用的,强者直接写死数据()。</a>
<div class="flex flex-wrap">
<span class="tag bg-pink-100 text-pink-800">HTML</span>
<span class="tag bg-purple-100 text-purple-800">Python</span>
</div>
</div>
</div>
<!-- 项目项 2 - http://index.mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2023">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://index.mxzfun.xyz/" target="_blank" class="text-xl font-bold text-dark link-text">测试首页</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2023-02-09
</div>
<a href="http://index.mxzfun.xyz/" target="_blank" class="text-gray-600 mb-4 block link-text">
当时是为了测试index的三级域名的,无意义。
</a>
<div class="flex flex-wrap">
<span class="tag bg-blue-100 text-blue-800">Markdown</span>
<span class="tag bg-purple-100 text-purple-800">HTML</span>
</div>
</div>
</div>
<!-- 2022年 -->
<!-- 项目项 5 - https://yosoroq.github.io/#/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2022">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="https://yosoroq.github.io/#/" target="_blank"
class="text-xl font-bold text-dark link-text">yosoroq.github.io</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2022-11-19
</div>
<a href="https://yosoroq.github.io/#/" target="_blank" class="text-gray-600 mb-4 block link-text">
github.io的Docsify使用指南,当初github.io的国内文档是一个比一个抽象,这么简单的东西搞这么复杂。</a>
<div class="flex flex-wrap">
<span class="tag bg-yellow-100 text-yellow-800">github</span>
<span class="tag bg-purple-100 text-purple-800">Docsify</span>
<span class="tag bg-green-100 text-green-800">Typora</span>
</div>
</div>
</div>
<!-- 项目项 1 - Docsify使用指南 -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2022">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://docs.mxzfun.xyz/#/" target="_blank"
class="text-xl font-bold text-dark link-text">Docsify使用指南</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2022-11-17
</div>
<a href="http://docs.mxzfun.xyz/#/" target="_blank" class="text-gray-600 mb-4 block link-text">
Docsify使用指南,当初测试Docsify用的,没想到这么久了还在。
</a>
<div class="flex flex-wrap">
<span class="tag bg-blue-100 text-blue-800">Typora</span>
<span class="tag bg-purple-100 text-purple-800">Docsify</span>
</div>
</div>
</div>
<!-- 项目项 2 - http://gis.mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2022">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://gis.mxzfun.xyz/" target="_blank" class="text-xl font-bold text-dark link-text">智慧校园</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2022-05-03
</div>
<a href="http://gis.mxzfun.xyz/" target="_blank" class="text-gray-600 mb-4 block link-text">
智慧校园,基于高德api开发,现在看来也挺有意思的,虽然简单。
</a>
<div class="flex flex-wrap">
<span class="tag bg-blue-100 text-blue-800">Amap</span>
<span class="tag bg-purple-100 text-purple-800">HTML</span>
</div>
</div>
</div>
<!-- 项目项 4 - http://qny.expressisland.cn/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2022">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://qny.expressisland.cn/" target="_blank" class="text-xl font-bold text-dark link-text">图床</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2022-04-06
</div>
<a href="http://qny.expressisland.cn/" target="_blank" class="text-gray-600 mb-4 block link-text">基于
七牛云的图床,主要也是我这个小水管服务器加载图片太慢了。</a>
<div class="flex flex-wrap">
<span class="tag bg-green-100 text-green-800">qiniu</span>
</div>
</div>
</div>
<!-- 项目项 3 - http://r-18.mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2022">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://r-18.mxzfun.xyz/" target="_blank"
class="text-xl font-bold text-dark link-text">随机涩图-R-18</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2022-02-07
</div>
<a href="http://r-18.mxzfun.xyz/" target="_blank" class="text-gray-600 mb-4 block link-text">
title是这样写的,但并没有涩图好哇,原来是有的,通过调用阿里云oss里的数据,随机给你打开一张涩图,但还是怕举报,
现在点击自动跳转《never gonna give you up》,Never gonna give you up~~
</a>
<div class="flex flex-wrap">
<span class="tag bg-purple-100 text-purple-800">HTML</span>
</div>
</div>
</div>
<!-- 2021 -->
<!-- 项目项 5 -http://mxzfun.xyz/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2020">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://mxzfun.xyz/" target="_blank" class="text-xl font-bold text-dark link-text">三二一的一的二</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2021-01-09
</div>
<a href="http://mxzfun.xyz/" target="_blank" class="text-gray-600 mb-4 block link-text">
后面创建的技术博客。</a>
<div class="flex flex-wrap">
<span class="tag bg-yellow-100 text-yellow-800">typecho</span>
<span class="tag bg-purple-100 text-purple-800">PHP</span>
</div>
</div>
</div>
<!-- 2020 -->
<!-- 项目项 5 -https://mxzfun.blog.fc2.com/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2020">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="https://mxzfun.blog.fc2.com/" target="_blank" class="text-xl font-bold text-dark link-text">fc2
blog(知行)</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2020-08-23
</div>
<a href="https://mxzfun.blog.fc2.com/" target="_blank" class="text-gray-600 mb-4 block link-text">
一开始是想作为博客备份的,但转移过来发现效果并不理想。</a>
<div class="flex flex-wrap">
<span class="tag bg-yellow-100 text-yellow-800">jQuery</span>
<span class="tag bg-purple-100 text-purple-800">fc2</span>
</div>
</div>
</div>
<!-- 项目项 5 -http://mxzfun.com/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2020">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="http://mxzfun.com/" target="_blank" class="text-xl font-bold text-dark link-text">前行 连接</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2020-05-25
</div>
<a href="http://mxzfun.com/" target="_blank" class="text-gray-600 mb-4 block link-text">
日常博客。</a>
<div class="flex flex-wrap">
<span class="tag bg-yellow-100 text-yellow-800">WordPress</span>
<span class="tag bg-purple-100 text-purple-800">PHP</span>
</div>
</div>
</div>
<!-- 2019 -->
<!-- 项目项 5 -https://yohane.home.blog/ -->
<div class="bg-white rounded-xl shadow overflow-hidden card-hover project-item" data-year="2019">
<div class="p-6">
<div class="flex flex-wrap justify-between items-start mb-4">
<a href="https://yohane.home.blog/" target="_blank"
class="text-xl font-bold text-dark link-text">早期wp测试博客</a>
</div>
<div class="text-gray-500 text-sm mb-4 flex items-center">
<i class="fa fa-calendar-o mr-2"></i>2019-09-05
</div>
<a href="https://yohane.home.blog/" target="_blank" class="text-gray-600 mb-4 block link-text">
我都忘了我有这个博客了。</a>
<div class="flex flex-wrap">
<span class="tag bg-yellow-100 text-yellow-800">WordPress</span>
<span class="tag bg-purple-100 text-purple-800">PHP</span>
</div>
</div>
</div>
</div>
<!-- 分页组件 - 空容器,JS动态生成页码 -->
<div class="text-center mt-12" id="pagination">
<div class="flex items-center justify-center gap-2" id="pagination-buttons">
<!-- 页码按钮由JS动态生成 -->
</div>
</div>
</main>
<!-- 页脚 -->
<footer class="bg-dark text-white py-10 mt-16">
<div class="container mx-auto px-4">
<div class="flex flex-col md:flex-row justify-between items-center">
<div class="mb-6 md:mb-0">
<div class="text-xl font-bold mb-2 flex items-center">
<i class="fa fa-code-fork mr-2"></i>二级页面
</div>
<p class="text-gray-400">探索与实践的技术足迹</p>
</div>
<div class="flex space-x-6">
<a href="https://github.com/yosoroQ" class="text-gray-400 hover:text-white transition-colors">
<i class="fa fa-github text-xl"></i>
</a>
<a href="http://mxzfun.xyz/" class="text-gray-400 hover:text-white transition-colors">
<i class="fa fa-twitter text-xl"></i>
</a>
<a href="http://mxzfun.com" class="text-gray-400 hover:text-white transition-colors">
<i class="fa fa-linkedin text-xl"></i>
</a>
</div>
</div>
<div class="border-t border-gray-700 mt-8 pt-8 text-center text-gray-400 text-sm">
© 2026 二级页面. 保留所有权利.
</div>
</div>
</footer>
<!-- JavaScript - 年份筛选+分页联动+动态页码 完整无错 -->
<script>
document.addEventListener('DOMContentLoaded', function () {
// 基础配置 - 每页固定6个项目
const pageSize = 6;
let currentPage = 1;
let filterYear = 'all';
const projectItems = document.querySelectorAll('.project-item');
const paginationContainer = document.getElementById('pagination-buttons');
// 1. 平滑滚动
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' });
});
});
// 2. 年份筛选功能
const yearFilters = document.querySelectorAll('.year-filter');
yearFilters.forEach(btn => {
btn.addEventListener('click', function () {
yearFilters.forEach(b => {
b.classList.remove('bg-primary', 'text-white');
b.classList.add('bg-white', 'text-gray-700', 'shadow');
});
this.classList.remove('bg-white', 'text-gray-700', 'shadow');
this.classList.add('bg-primary', 'text-white');
filterYear = this.dataset.year;
currentPage = 1; // 筛选后重置为第一页
renderProjects();
});
});
// 核心方法1:动态生成分页按钮
function renderPagination(totalPages) {
paginationContainer.innerHTML = '';
// 上一页按钮
const prevBtn = document.createElement('button');
prevBtn.className = `px-4 py-2 rounded-lg border border-primary text-primary hover:bg-primary/5 transition-colors ${currentPage <= 1 ? 'page-disable' : ''}`;
prevBtn.innerHTML = '<i class="fa fa-angle-left mr-1"></i>上一页';
prevBtn.addEventListener('click', () => {
if (currentPage > 1) {
currentPage--;
renderProjects();
}
});
paginationContainer.appendChild(prevBtn);
// 生成数字页码
for (let i = 1; i <= totalPages; i++) {
const pageBtn = document.createElement('button');
pageBtn.className = i === currentPage
? 'px-4 py-2 rounded-lg page-active'
: 'px-4 py-2 rounded-lg bg-white text-gray-700 shadow hover:bg-gray-50 transition-colors';
pageBtn.dataset.page = i;
pageBtn.textContent = i;
pageBtn.addEventListener('click', () => {
currentPage = i;
renderProjects();
});
paginationContainer.appendChild(pageBtn);
}
// 下一页按钮
const nextBtn = document.createElement('button');
nextBtn.className = `px-4 py-2 rounded-lg border border-primary text-primary hover:bg-primary/5 transition-colors ${currentPage >= totalPages ? 'page-disable' : ''}`;
nextBtn.innerHTML = '下一页<i class="fa fa-angle-right ml-1"></i>';
nextBtn.addEventListener('click', () => {
if (currentPage < totalPages) {
currentPage++;
renderProjects();
}
});
paginationContainer.appendChild(nextBtn);
}
// 核心方法2:筛选+分页 联动渲染项目
function renderProjects() {
const filteredItems = Array.from(projectItems).filter(item => {
return filterYear === 'all' || item.dataset.year === filterYear;
});
const filteredTotal = filteredItems.length;
const totalPages = Math.ceil(filteredTotal / pageSize);
projectItems.forEach(item => item.classList.add('hidden'));
const start = (currentPage - 1) * pageSize;
const end = start + pageSize;
filteredItems.slice(start, end).forEach(item => item.classList.remove('hidden'));
renderPagination(totalPages);
}
// 初始化渲染
renderProjects();
});
</script>
</body>
</html>作者:mxzfun / yosoroQ
更新时间:2026-01-16




Comments | NOTHING
该文章已经关闭评论