refactor: 重构网站样式和功能,优化用户体验

- 删除冗余CSS文件(bj.css, font.css, sey.css, stars-style.css)
- 重构导航栏样式,添加现代化交互效果
- 优化社交图标,使用SVG替代字体图标并添加渐变效果
- 新增关于页面(about.html)及相关资源
- 更新首页(index.html)布局和样式
- 重构星空背景JavaScript(bj.js),添加错误处理
- 新增关于页面JavaScript功能(about.js)
This commit is contained in:
hehh
2025-08-05 12:16:35 +08:00
parent a5b2ad5478
commit 56bd98a1b9
11 changed files with 2162 additions and 561 deletions

246
about.html Normal file
View File

@@ -0,0 +1,246 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>关于我 - Honesty</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/about.css">
<link rel="stylesheet" href="css/iconfont.css">
<link rel="icon" href="favicon.ico">
<meta name="description" content="了解更多关于Honesty的信息 - 技术栈、项目经验、个人兴趣">
</head>
<body>
<div class="about-container">
<!-- 导航栏 -->
<nav class="about-nav">
<div class="nav-content">
<a href="index.html" class="nav-logo">
<img src="https://cdn.jsdmirror.com/gh/listener-He/images@default/202309111525908.jpeg" alt="Honesty">
<span>Honesty</span>
</a>
<div class="nav-links">
<a href="index.html">首页</a>
<a href="about.html" class="active">关于我</a>
</div>
</div>
</nav>
<!-- 主要内容 -->
<main class="about-main">
<!-- 英雄区域 -->
<section class="hero-section">
<div class="hero-background">
<div class="floating-shapes">
<div class="shape shape-1"></div>
<div class="shape shape-2"></div>
<div class="shape shape-3"></div>
</div>
</div>
<div class="hero-content">
<div class="profile-avatar">
<img src="https://cdn.jsdmirror.com/gh/listener-He/images@default/202309111525908.jpeg" alt="Honesty">
<div class="avatar-ring"></div>
</div>
<h1 class="hero-title">Honesty</h1>
<p class="hero-subtitle">全栈开发工程师 · 开源爱好者</p>
<div class="personality-badge">
<span class="mbti-tag">INFJ</span>
<span class="badge-desc">提倡者人格</span>
</div>
<div class="hero-stats">
<div class="stat-item">
<span class="stat-number" id="github-repos">--</span>
<span class="stat-label">开源项目</span>
</div>
<div class="stat-item">
<span class="stat-number" id="github-followers">--</span>
<span class="stat-label">GitHub关注</span>
</div>
<div class="stat-item">
<span class="stat-number" id="total-visitors">--</span>
<span class="stat-label">访问量</span>
</div>
</div>
</div>
</section>
<!-- 技术栈云图 -->
<section class="tech-cloud-section">
<div class="section-header">
<h2 class="section-title">技术栈</h2>
<p class="section-subtitle">我的技术工具箱</p>
</div>
<div class="tech-cloud">
<div class="tech-orbit orbit-1">
<span class="tech-item primary">JavaScript</span>
<span class="tech-item primary">Java</span>
<span class="tech-item primary">Python</span>
</div>
<div class="tech-orbit orbit-2">
<span class="tech-item secondary">Vue.js</span>
<span class="tech-item secondary">React</span>
<span class="tech-item secondary">Spring Boot</span>
<span class="tech-item secondary">Node.js</span>
</div>
<div class="tech-orbit orbit-3">
<span class="tech-item tertiary">TypeScript</span>
<span class="tech-item tertiary">MySQL</span>
<span class="tech-item tertiary">Docker</span>
<span class="tech-item tertiary">Git</span>
<span class="tech-item tertiary">Linux</span>
<span class="tech-item tertiary">AWS</span>
</div>
</div>
</section>
<!-- 个性特质时间线 -->
<section class="personality-timeline-section">
<div class="section-header">
<h2 class="section-title">关于我</h2>
<p class="section-subtitle">INFJ · 创造者 · 探索者</p>
</div>
<div class="personality-timeline">
<div class="timeline-item">
<div class="timeline-icon">🚴‍♂️</div>
<div class="timeline-content">
<h3>骑行爱好者</h3>
<p>享受在路上的自由感,用车轮丈量世界,在风景中寻找灵感</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-icon">📚</div>
<div class="timeline-content">
<h3>阅读与写作</h3>
<p>通过文字记录思考轨迹,分享技术见解,用代码诠释创意</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-icon">🔍</div>
<div class="timeline-content">
<h3>开源探索</h3>
<p>热衷于开源项目,相信分享的力量,用代码连接世界</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-icon">💡</div>
<div class="timeline-content">
<h3>持续学习</h3>
<p>保持对新技术的好奇心,在变化中成长,在挑战中进步</p>
</div>
</div>
</div>
</section>
<!-- GitHub项目展示 -->
<section class="github-showcase-section">
<div class="section-header">
<h2 class="section-title">开源项目</h2>
<p class="section-subtitle">用代码改变世界</p>
</div>
<div class="projects-masonry" id="projects-container">
<div class="loading-placeholder">
<div class="loading-spinner"></div>
<p>正在加载项目...</p>
</div>
</div>
</section>
<!-- 博客文章瀑布流 -->
<section class="blog-waterfall-section">
<div class="section-header">
<h2 class="section-title">最新文章</h2>
<p class="section-subtitle">思考的足迹</p>
<a href="#" class="view-all-link" target="_blank">
查看全部 <i class="iconfont icon-arrow-right"></i>
</a>
</div>
<div class="articles-waterfall" id="blog-container">
<div class="loading-placeholder">
<div class="loading-spinner"></div>
<p>正在加载文章...</p>
</div>
</div>
</section>
<!-- 访问统计仪表盘 -->
<section class="stats-dashboard-section">
<div class="section-header">
<h2 class="section-title">访问统计</h2>
<p class="section-subtitle">数据驱动的成长</p>
</div>
<div class="stats-dashboard">
<div class="stat-card primary">
<div class="stat-icon">👥</div>
<div class="stat-number" id="total-visitors">-</div>
<div class="stat-label">总访问人数</div>
</div>
<div class="stat-card secondary">
<div class="stat-icon">📊</div>
<div class="stat-number" id="total-visits">-</div>
<div class="stat-label">总访问次数</div>
</div>
<div class="stat-card accent">
<div class="stat-icon">🌟</div>
<div class="stat-number" id="today-visitors">-</div>
<div class="stat-label">今日访问人数</div>
</div>
<div class="stat-card highlight">
<div class="stat-icon">🔥</div>
<div class="stat-number" id="today-visits">-</div>
<div class="stat-label">今日访问次数</div>
</div>
</div>
</section>
<!-- 联系方式浮动区域 -->
<section class="contact-floating-section">
<div class="contact-container">
<div class="contact-title">
<h2>让我们连接</h2>
<p>欢迎交流技术、分享想法</p>
</div>
<div class="social-orbit">
<div class="social-center">
<i class="iconfont icon-message"></i>
</div>
<a href="https://github.com/listener-He" class="social-planet planet-1" target="_blank">
<i class="iconfont icon-github"></i>
<span>GitHub</span>
</a>
<a href="mailto:your-email@example.com" class="social-planet planet-2">
<i class="iconfont icon-email"></i>
<span>邮箱</span>
</a>
<a href="#" class="social-planet planet-3" target="_blank">
<i class="iconfont icon-blog"></i>
<span>博客</span>
</a>
</div>
</div>
</section>
<!-- 评论系统 -->
<section class="comments-section">
<div class="comments-container">
<h2 class="section-title">留言板</h2>
<p class="section-subtitle">分享你的想法</p>
<div id="artalk-container"></div>
</div>
</section>
</main>
<!-- 页脚 -->
<footer class="about-footer">
<p>&copy; 2024 Honesty. All rights reserved.</p>
</footer>
</div>
<!-- 脚本文件 -->
<script src="js/jquery.min.js"></script>
<script src="js/about.js"></script>
<!-- Artalk 评论系统 -->
<script src="https://unpkg.com/artalk@latest/dist/Artalk.js"></script>
<link href="https://unpkg.com/artalk@latest/dist/Artalk.css" rel="stylesheet">
</body>
</html>

992
css/about.css Normal file
View File

@@ -0,0 +1,992 @@
/* 关于页面样式 - 现代动态设计 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background: #0a0a0a;
min-height: 100vh;
overflow-x: hidden;
}
/* 动态背景 */
body::before {
content: '';
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background:
radial-gradient(circle at 20% 80%, rgba(120, 119, 198, 0.3) 0%, transparent 50%),
radial-gradient(circle at 80% 20%, rgba(255, 119, 198, 0.3) 0%, transparent 50%),
radial-gradient(circle at 40% 40%, rgba(120, 219, 255, 0.2) 0%, transparent 50%);
z-index: -1;
animation: backgroundShift 20s ease-in-out infinite;
}
@keyframes backgroundShift {
0%, 100% { transform: scale(1) rotate(0deg); }
50% { transform: scale(1.1) rotate(5deg); }
}
/* 导航栏 */
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(10, 10, 10, 0.8);
backdrop-filter: blur(20px);
z-index: 1000;
padding: 1rem 0;
transition: all 0.3s ease;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.navbar.scrolled {
background: rgba(10, 10, 10, 0.95);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
.nav-container {
max-width: 1400px;
margin: 0 auto;
padding: 0 2rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-logo {
font-size: 1.5rem;
font-weight: 700;
color: #fff;
text-decoration: none;
background: linear-gradient(45deg, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.nav-links {
display: flex;
list-style: none;
gap: 2rem;
}
.nav-links a {
text-decoration: none;
color: rgba(255, 255, 255, 0.8);
font-weight: 500;
transition: all 0.3s ease;
position: relative;
}
.nav-links a::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(45deg, #667eea, #764ba2);
transition: width 0.3s ease;
}
.nav-links a:hover,
.nav-links a.active {
color: #fff;
}
.nav-links a:hover::after,
.nav-links a.active::after {
width: 100%;
}
/* 主要内容 */
.main-content {
margin-top: 80px;
max-width: 1400px;
margin-left: auto;
margin-right: auto;
}
/* 英雄区域 */
.hero-section {
position: relative;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.hero-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.floating-shapes {
position: absolute;
width: 100%;
height: 100%;
}
.shape {
position: absolute;
border-radius: 50%;
background: linear-gradient(45deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.1));
animation: float 6s ease-in-out infinite;
}
.shape-1 {
width: 300px;
height: 300px;
top: 10%;
left: 10%;
animation-delay: 0s;
}
.shape-2 {
width: 200px;
height: 200px;
top: 60%;
right: 10%;
animation-delay: 2s;
}
.shape-3 {
width: 150px;
height: 150px;
bottom: 20%;
left: 60%;
animation-delay: 4s;
}
@keyframes float {
0%, 100% { transform: translateY(0px) rotate(0deg); }
50% { transform: translateY(-20px) rotate(180deg); }
}
.hero-content {
text-align: center;
z-index: 1;
padding: 2rem;
}
.profile-avatar {
position: relative;
display: inline-block;
margin-bottom: 2rem;
}
.avatar-image {
width: 150px;
height: 150px;
border-radius: 50%;
object-fit: cover;
border: 4px solid rgba(255, 255, 255, 0.2);
transition: all 0.3s ease;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
}
.avatar-image:hover {
transform: scale(1.05);
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.4);
}
.avatar-ring {
position: absolute;
top: -15px;
left: -15px;
right: -15px;
bottom: -15px;
border: 2px solid;
border-image: linear-gradient(45deg, #667eea, #764ba2, #667eea) 1;
border-radius: 50%;
animation: rotate 10s linear infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.hero-title {
font-size: 4rem;
font-weight: 800;
color: #fff;
margin-bottom: 1rem;
background: linear-gradient(45deg, #667eea, #764ba2);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
animation: titleGlow 3s ease-in-out infinite alternate;
}
@keyframes titleGlow {
from { filter: drop-shadow(0 0 20px rgba(102, 126, 234, 0.5)); }
to { filter: drop-shadow(0 0 30px rgba(118, 75, 162, 0.8)); }
}
.hero-subtitle {
font-size: 1.5rem;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 2rem;
font-weight: 300;
}
.personality-badge {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
margin-bottom: 3rem;
}
.mbti-tag {
background: linear-gradient(45deg, #667eea, #764ba2);
color: #fff;
padding: 0.8rem 1.5rem;
border-radius: 30px;
font-size: 1rem;
font-weight: 700;
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
animation: pulse 2s infinite;
}
.badge-desc {
color: rgba(255, 255, 255, 0.7);
font-size: 0.9rem;
font-style: italic;
}
.hero-stats {
display: flex;
justify-content: center;
gap: 3rem;
flex-wrap: wrap;
}
.hero-stats .stat-item {
text-align: center;
}
.hero-stats .stat-number {
font-size: 2.5rem;
font-weight: 800;
color: #fff;
display: block;
margin-bottom: 0.5rem;
}
.hero-stats .stat-label {
color: rgba(255, 255, 255, 0.6);
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 1px;
}
/* 通用区域样式 */
.section-header {
text-align: center;
margin-bottom: 4rem;
padding: 0 2rem;
}
.section-title {
font-size: 3rem;
font-weight: 800;
color: #fff;
margin-bottom: 1rem;
position: relative;
display: inline-block;
}
.section-title::after {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
width: 60px;
height: 4px;
background: linear-gradient(45deg, #667eea, #764ba2);
border-radius: 2px;
}
.section-subtitle {
font-size: 1.2rem;
color: rgba(255, 255, 255, 0.6);
font-weight: 300;
}
/* 技术栈云图 */
.tech-cloud-section {
padding: 8rem 2rem;
position: relative;
}
.tech-cloud {
position: relative;
width: 600px;
height: 600px;
margin: 0 auto;
}
.tech-orbit {
position: absolute;
border-radius: 50%;
border: 1px solid rgba(255, 255, 255, 0.1);
animation: orbitRotate 30s linear infinite;
}
.orbit-1 {
width: 200px;
height: 200px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation-duration: 20s;
}
.orbit-2 {
width: 350px;
height: 350px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation-duration: 30s;
animation-direction: reverse;
}
.orbit-3 {
width: 500px;
height: 500px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation-duration: 40s;
}
@keyframes orbitRotate {
from { transform: translate(-50%, -50%) rotate(0deg); }
to { transform: translate(-50%, -50%) rotate(360deg); }
}
.tech-item {
position: absolute;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
color: #fff;
padding: 0.8rem 1.5rem;
border-radius: 25px;
font-size: 0.9rem;
font-weight: 600;
border: 1px solid rgba(255, 255, 255, 0.2);
transition: all 0.3s ease;
cursor: pointer;
white-space: nowrap;
}
.tech-item:hover {
background: rgba(255, 255, 255, 0.2);
transform: scale(1.1);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
.tech-item.primary {
background: linear-gradient(45deg, #667eea, #764ba2);
box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
}
.tech-item.secondary {
background: rgba(102, 126, 234, 0.2);
border-color: rgba(102, 126, 234, 0.4);
}
.tech-item.tertiary {
background: rgba(255, 255, 255, 0.05);
}
/* 技术项目位置 */
.orbit-1 .tech-item:nth-child(1) { top: -15px; left: 50%; transform: translateX(-50%); }
.orbit-1 .tech-item:nth-child(2) { bottom: -15px; left: 50%; transform: translateX(-50%); }
.orbit-1 .tech-item:nth-child(3) { top: 50%; right: -15px; transform: translateY(-50%); }
.orbit-2 .tech-item:nth-child(1) { top: -15px; left: 50%; transform: translateX(-50%); }
.orbit-2 .tech-item:nth-child(2) { top: 50%; right: -15px; transform: translateY(-50%); }
.orbit-2 .tech-item:nth-child(3) { bottom: -15px; left: 50%; transform: translateX(-50%); }
.orbit-2 .tech-item:nth-child(4) { top: 50%; left: -15px; transform: translateY(-50%); }
.orbit-3 .tech-item:nth-child(1) { top: -15px; left: 30%; }
.orbit-3 .tech-item:nth-child(2) { top: -15px; right: 30%; }
.orbit-3 .tech-item:nth-child(3) { top: 30%; right: -15px; }
.orbit-3 .tech-item:nth-child(4) { bottom: 30%; right: -15px; }
.orbit-3 .tech-item:nth-child(5) { bottom: -15px; left: 30%; }
.orbit-3 .tech-item:nth-child(6) { top: 30%; left: -15px; }
/* 个性时间线 */
.personality-timeline-section {
padding: 8rem 2rem;
background: rgba(255, 255, 255, 0.02);
}
.personality-timeline {
max-width: 800px;
margin: 0 auto;
position: relative;
}
.personality-timeline::before {
content: '';
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(to bottom, #667eea, #764ba2);
transform: translateX(-50%);
}
.timeline-item {
display: flex;
align-items: center;
margin-bottom: 4rem;
position: relative;
}
.timeline-item:nth-child(even) {
flex-direction: row-reverse;
}
.timeline-icon {
width: 80px;
height: 80px;
border-radius: 50%;
background: linear-gradient(45deg, #667eea, #764ba2);
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
z-index: 2;
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.3);
}
.timeline-content {
flex: 1;
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
padding: 2rem;
border-radius: 20px;
margin: 0 2rem;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
}
.timeline-content:hover {
background: rgba(255, 255, 255, 0.08);
transform: translateY(-5px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
}
.timeline-content h3 {
color: #fff;
font-size: 1.5rem;
margin-bottom: 1rem;
font-weight: 600;
}
.timeline-content p {
color: rgba(255, 255, 255, 0.8);
line-height: 1.6;
}
/* GitHub项目展示 */
.github-showcase-section {
padding: 8rem 2rem;
}
.projects-masonry {
max-width: 1200px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
align-items: start;
}
.project-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 2rem;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
position: relative;
overflow: hidden;
}
.project-card::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
transition: left 0.5s ease;
}
.project-card:hover::before {
left: 100%;
}
.project-card:hover {
transform: translateY(-10px);
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
border-color: rgba(102, 126, 234, 0.3);
}
.project-title {
color: #fff;
font-size: 1.3rem;
margin-bottom: 1rem;
font-weight: 600;
}
.project-description {
color: rgba(255, 255, 255, 0.8);
margin-bottom: 1.5rem;
line-height: 1.6;
}
.project-stats {
display: flex;
gap: 1rem;
margin-bottom: 1rem;
}
.project-stat {
display: flex;
align-items: center;
gap: 0.3rem;
color: rgba(255, 255, 255, 0.7);
font-size: 0.9rem;
}
.project-link {
display: inline-block;
background: linear-gradient(45deg, #667eea, #764ba2);
color: #fff;
padding: 0.7rem 1.5rem;
border-radius: 25px;
text-decoration: none;
font-weight: 600;
transition: all 0.3s ease;
}
.project-link:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
}
/* 博客瀑布流 */
.blog-waterfall-section {
padding: 8rem 2rem;
background: rgba(255, 255, 255, 0.02);
}
.view-all-link {
color: #667eea;
text-decoration: none;
font-weight: 600;
display: inline-flex;
align-items: center;
gap: 0.5rem;
transition: all 0.3s ease;
}
.view-all-link:hover {
color: #764ba2;
transform: translateX(5px);
}
.articles-waterfall {
max-width: 1200px;
margin: 0 auto;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
align-items: start;
}
.article-card {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border-radius: 15px;
padding: 1.5rem;
border: 1px solid rgba(255, 255, 255, 0.1);
transition: all 0.3s ease;
text-decoration: none;
display: block;
}
.article-card:hover {
transform: translateY(-5px);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
background: rgba(255, 255, 255, 0.08);
}
.article-title {
color: #fff;
font-size: 1.2rem;
font-weight: 600;
margin-bottom: 1rem;
line-height: 1.4;
}
.article-excerpt {
color: rgba(255, 255, 255, 0.7);
font-size: 0.9rem;
line-height: 1.5;
margin-bottom: 1rem;
}
.article-meta {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.8rem;
color: rgba(255, 255, 255, 0.5);
}
.article-category {
background: rgba(102, 126, 234, 0.2);
color: #667eea;
padding: 0.3rem 0.8rem;
border-radius: 12px;
font-size: 0.7rem;
font-weight: 600;
}
/* 联系方式轨道 */
.contact-floating-section {
padding: 8rem 2rem;
position: relative;
}
.contact-container {
max-width: 800px;
margin: 0 auto;
text-align: center;
}
.contact-title h2 {
font-size: 2.5rem;
color: #fff;
margin-bottom: 1rem;
font-weight: 700;
}
.contact-title p {
color: rgba(255, 255, 255, 0.6);
font-size: 1.1rem;
margin-bottom: 4rem;
}
.social-orbit {
position: relative;
width: 400px;
height: 400px;
margin: 0 auto;
}
.social-center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80px;
height: 80px;
background: linear-gradient(45deg, #667eea, #764ba2);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
color: #fff;
box-shadow: 0 15px 35px rgba(102, 126, 234, 0.4);
animation: pulse 2s infinite;
}
.social-planet {
position: absolute;
width: 100px;
height: 100px;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border-radius: 50%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-decoration: none;
color: #fff;
border: 1px solid rgba(255, 255, 255, 0.2);
transition: all 0.3s ease;
animation: planetOrbit 15s linear infinite;
}
.social-planet:hover {
background: rgba(255, 255, 255, 0.2);
transform: scale(1.1);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
}
.social-planet i {
font-size: 1.5rem;
margin-bottom: 0.3rem;
}
.social-planet span {
font-size: 0.8rem;
font-weight: 600;
}
.planet-1 {
top: 0;
left: 50%;
transform: translateX(-50%);
animation-delay: 0s;
}
.planet-2 {
top: 50%;
right: 0;
transform: translateY(-50%);
animation-delay: 5s;
}
.planet-3 {
bottom: 0;
left: 50%;
transform: translateX(-50%);
animation-delay: 10s;
}
@keyframes planetOrbit {
from { transform: rotate(0deg) translateX(150px) rotate(0deg); }
to { transform: rotate(360deg) translateX(150px) rotate(-360deg); }
}
/* 评论系统 */
.comments-section {
padding: 8rem 2rem;
background: rgba(255, 255, 255, 0.02);
}
.comments-container {
max-width: 1000px;
margin: 0 auto;
text-align: center;
}
.comments-container .section-title {
margin-bottom: 0.5rem;
}
.comments-container .section-subtitle {
margin-bottom: 3rem;
}
#artalk-container {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 2rem;
border: 1px solid rgba(255, 255, 255, 0.1);
text-align: left;
}
/* 加载动画 */
.loading-placeholder {
text-align: center;
padding: 4rem 2rem;
color: rgba(255, 255, 255, 0.6);
}
.loading-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(255, 255, 255, 0.1);
border-top: 3px solid #667eea;
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto 1rem;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.05); }
}
/* 响应式设计 */
@media (max-width: 1024px) {
.tech-cloud {
width: 500px;
height: 500px;
}
.orbit-3 {
width: 400px;
height: 400px;
}
.social-orbit {
width: 300px;
height: 300px;
}
}
@media (max-width: 768px) {
.nav-container {
padding: 0 1rem;
}
.nav-links {
gap: 1rem;
}
.hero-title {
font-size: 2.5rem;
}
.hero-subtitle {
font-size: 1.2rem;
}
.hero-stats {
gap: 2rem;
}
.section-title {
font-size: 2rem;
}
.tech-cloud {
width: 350px;
height: 350px;
}
.orbit-2 {
width: 250px;
height: 250px;
}
.orbit-3 {
width: 300px;
height: 300px;
}
.personality-timeline::before {
left: 30px;
}
.timeline-item {
flex-direction: row !important;
padding-left: 80px;
}
.timeline-icon {
position: absolute;
left: 0;
width: 60px;
height: 60px;
font-size: 1.5rem;
}
.timeline-content {
margin: 0;
margin-left: 1rem;
}
.social-orbit {
width: 250px;
height: 250px;
}
.social-planet {
width: 80px;
height: 80px;
}
.social-planet i {
font-size: 1.2rem;
}
.social-planet span {
font-size: 0.7rem;
}
.projects-masonry,
.articles-waterfall {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.hero-title {
font-size: 2rem;
}
.hero-stats {
flex-direction: column;
gap: 1rem;
}
.personality-badge {
flex-direction: column;
gap: 0.5rem;
}
.tech-cloud {
width: 280px;
height: 280px;
}
.orbit-1 {
width: 120px;
height: 120px;
}
.orbit-2 {
width: 180px;
height: 180px;
}
.orbit-3 {
width: 240px;
height: 240px;
}
.tech-item {
padding: 0.5rem 1rem;
font-size: 0.8rem;
}
}

View File

@@ -1,7 +0,0 @@
canvas{
position:fixed;/*<2A><><EFBFBD>ö<EFBFBD>λ*/
top:0;
left:0;
z-index:-1;/*ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>*/
background:#0e1729;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ*/
}

View File

@@ -1,7 +0,0 @@
@font-face {
font-family:'EngraversOldEnglishBT-Bold';
src: url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.gif?r=110901002758');
src: url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.gif?r=110901002758?#iefix') format('embedded-opentype'), url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.png?r=110901002758') format('woff2'), url('//cdn.webfont.youziku.com/webfonts/nomal/123918/33195/5d21f88af629d8080c5960eb.bmp?r=110901002758') format('woff');
font-weight: normal;
font-style: normal;
}

View File

@@ -1,123 +0,0 @@
*
{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
/* 移除全局a:hover样式避免影响社交元素 */
/*
a:hover
{
border-radius: 25px;
background: var(--clr);
color: var(--clr);
letter-spacing: 0.25em;
box-shadow: 0 0 35px var(--clr);
}
*/
/* 为非社交元素的链接保留hover效果 */
:not(.social-icons-row) a:hover {
border-radius: 25px;
background: var(--clr);
color: var(--clr);
letter-spacing: 0.25em;
box-shadow: 0 0 35px var(--clr);
}
span
{
position: relative;
z-index: 1;
}
i
{
position: absolute;
inset: 0;
display: block;
}
/* 移除伪元素动画效果,避免影响社交元素 */
/*
i::before
{
content: '';
position: absolute;
top: -3.5px;
left: 80%;
width: 10px;
height: 5px;
background: #27282c;
transform: translateX(-50%);
border: 2px solid var(--clr);
transition: 0.5s;
}
a:hover i::before
{
width: 20px;
left: 20%;
}
*/
/* 为非社交元素的伪元素保留效果 */
:not(.social-icons-row) i::before
{
content: '';
position: absolute;
top: -3.5px;
left: 80%;
width: 10px;
height: 5px;
background: #27282c;
transform: translateX(-50%);
border: 2px solid var(--clr);
transition: 0.5s;
}
:not(.social-icons-row) a:hover i::before
{
width: 20px;
left: 20%;
}
/* 移除伪元素动画效果,避免影响社交元素 */
/*
i::after
{
content: '';
position: absolute;
bottom: -3.5px;
left: 20%;
width: 10px;
height: 5px;
background: #27282c;
transform: translateX(-50%);
border: 2px solid var(--clr);
transition: 0.5s;
}
a:hover i::after
{
width: 20px;
left: 80%;
}
*/
/* 为非社交元素的伪元素保留效果 */
:not(.social-icons-row) i::after
{
content: '';
position: absolute;
bottom: -3.5px;
left: 20%;
width: 10px;
height: 5px;
background: #27282c;
transform: translateX(-50%);
border: 2px solid var(--clr);
transition: 0.5s;
}
:not(.social-icons-row) a:hover i::after
{
width: 20px;
left: 80%;
}

View File

@@ -1,317 +0,0 @@
* {
margin: 0;
padding: 0;
font-size: 14px;
box-sizing: content-box;
}
html,
body {
width: 100%;
height: 100%;
user-select: none;
}
#bg {
width: 100%;
min-width: 250px;
height: 100%;
position: fixed;
z-index: 1;
}
.container {
width: 100%;
min-width: 250px;
min-height: 100%;
position: relative;
z-index: 10;
color: #fff;
display: flex;
flex-direction: column;
align-items: center;
}
.container .avatar {
width: 80px;
height: 80px;
margin-top: 30%;
border-radius: 50%;
box-shadow: 0 0 90px 2px #fff;
opacity: 0.8;
cursor: pointer;
}
.container .nickname {
font-size: 18px;
margin-top: 20px;
letter-spacing: 2px;
animation: nickname-shadow 2s ease-in-out infinite alternate;
}
@keyframes nickname-shadow {
from {
text-shadow: 0 0 2px #f6f7fb;
}
to {
text-shadow: 1px 1px 20px #f6f7fb;
}
}
.container .introduce {
font-size: 14px;
margin-top: 20px;
padding: 0 28px;
letter-spacing: 1px;
text-align: center;
line-height: 28px;
}
.container .quote {
font-size: 14px;
margin-top: 20px;
padding: 0 28px;
letter-spacing: 1px;
text-align: center;
font-family: cursive;
line-height: 28px;
}
.container .quote::after {
content: '';
display: inline-block;
width: 2px;
height: 18px;
border-radius: 2px;
background-color: #fff;
vertical-align: middle;
animation: blink 0.8s linear infinite;
}
@keyframes blink {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
nav {
width: 80%;
min-height: 40px;
margin-top: 80px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
nav .item {
width: 28px;
height: 28px;
margin: 8px 12px;
position: relative;
display: flex;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.9);
justify-content: center;
align-items: center;
}
nav .item a {
color: #fff;
text-decoration: none;
display: block;
width: 20px;
height: 20px;
}
nav .item a:focus,
nav .item a:visited,
nav .item a:active {
color: #fff;
}
nav .item a img {
width: 100%;
height: 100%;
}
nav .item .tooltip {
position: absolute;
width: 80px;
max-height: 80px;
background-color: rgb(255, 255, 255);
bottom: 40px;
padding: 4px;
border-radius: 4px;
z-index: 10;
color: #333;
letter-spacing: 2px;
text-align: center;
opacity: 0;
z-index: -1;
transform: translateY(-40px);
transition: all 0.1s ease-in-out;
}
nav .item .tooltip img {
width: 100%;
height: 100%;
position: relative;
z-index: 10;
}
nav .item .tooltip::after {
content: '';
display: block;
width: 8px;
height: 8px;
border-radius: 2px;
background-color: rgb(255, 255, 255);
position: absolute;
bottom: -4px;
left: 40px;
transform: rotate(45deg);
z-index: 9;
}
nav .item a:focus+.tooltip,
nav .item a:hover+.tooltip {
transform: translateY(0);
z-index: 10;
opacity: 1;
}
footer {
width: 80%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 20px 0;
margin-top: 40px;
}
footer .icp {
color: #f6f7fb;
text-decoration: none;
letter-spacing: 2px;
font-size: 10px;
}
footer .copyright {
color: #999;
font-size: 10px;
margin-top: 8px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@media screen and (min-width:768px) {
.container .avatar {
width: 88px;
height: 88px;
margin-top: 20%;
}
.container .nickname {
font-size: 20px;
margin-top: 28px;
}
.container .introduce {
font-size: 16px;
margin-top: 28px;
padding: 0 40px;
}
.container .quote {
font-size: 16px;
margin-top: 28px;
padding: 0 40px;
}
.container .quote::after {
height: 20px;
}
nav {
margin-top: 90px;
}
nav .item {
width: 32px;
height: 32px;
}
nav .item .tooltip {
bottom: 48px;
}
nav .item a {
width: 22px;
height: 22px;
}
}
@media screen and (min-width:992px) {
.container .avatar {
width: 96px;
height: 96px;
margin-top: 10%;
}
.container .nickname {
font-size: 22px;
margin-top: 32px;
}
.container .introduce {
font-size: 18px;
margin-top: 36px;
padding: 0 80px;
}
.container .quote {
font-size: 18px;
margin-top: 36px;
padding: 0 80px;
}
.container .quote::after {
height: 22px;
}
nav {
margin-top: 100px;
}
nav .item {
width: 36px;
height: 36px;
margin: 12px;
}
nav .item .tooltip {
bottom: 56px;
}
nav .item a {
width: 24px;
height: 24px;
}
}

View File

@@ -88,25 +88,6 @@ pre {
pre code { padding: 0; background: none; border: none; word-wrap: normal; }
/* 主要布局样式 */
.container { position: relative; z-index: 500; width: 940px; margin: 0 auto; }
.content-wrapper {
z-index: 800;
width: 70%;
margin-left: 30%;
}
.content-wrapper__inner { margin: 0 10%; padding: 50px 0; }
.footer {
display: block;
padding: 1.5em 0;
text-align: center;
font-size: 0.85em;
color: rgba(255, 255, 255, 0.7);
background-color: rgba(0, 0, 0, 0.3);
margin-top: 2em;
}
/* 圆形元素样式 */
.avatar, .logo, .profilepic {
@@ -201,9 +182,6 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
}
/* 响应式适配 */
@media all and (max-width: 1100px) {}
@media all and (max-width: 960px) {}
@media all and (max-width: 510px) {
.navigation { line-height: 50px; }
@@ -261,8 +239,6 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
}
/* 设备适配 */
@media screen and (max-width: 768px) { .iphone-simulator { display: none; } }
@media screen and (min-width: 769px) { .iphone-simulator { display: block; } }
/* 重要布局组件样式 */
.panel {
@@ -271,7 +247,7 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
height: 100%;
}
.panel__vertical { display: table-cell; vertical-align: middle; }
.panel-title {
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
@@ -294,15 +270,14 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
/* 一言元素样式 - 细腻优雅字体 */
.panel-cover__description {
font-family: 'Source Han Serif SC', 'Noto Serif SC', 'PingFang SC', 'Hiragino Sans GB W3', 'Apple LiGothic Medium', 'Microsoft YaHei UI Light', serif;
font-size: 0.95em;
font-size: 0.9em;
font-weight: 200;
line-height: 1.9;
letter-spacing: 3px;
line-height: 2;
letter-spacing: 2px;
color: #ffffff;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
text-shadow: 0 1px 2px rgba(141, 114, 114, 0.2) !important;
position: relative;
z-index: 1;
opacity: 0.92;
font-feature-settings: 'kern' 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
@@ -381,64 +356,165 @@ pre code { padding: 0; background: none; border: none; word-wrap: normal; }
.panel-inverted a { color: #fff; }
/* 按钮样式 */
/* 现代化按钮样式 */
.btn, .navigation__item a {
padding: 10px 20px;
border: 1px solid #4e97d8;
border-radius: 20px;
font-size: 0.9em;
font-weight: bold;
letter-spacing: 1px;
padding: 8px 16px;
border: 2px solid transparent;
border-radius: 25px;
font-size: 0.95em;
font-weight: 450;
letter-spacing: 1.2px;
text-shadow: none;
color: #4e97d8;
color: #fff;
background: linear-gradient(135deg, rgba(255,255,255,0.01) 0%, rgba(255,255,255,0.005) 100%);
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(2px);
box-shadow: 0 2px 8px rgba(0,0,0,0.03);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
-webkit-font-smoothing: antialiased;
}
.btn:hover, .navigation__item a:hover { color: #4e97d8; border-color: #4e97d8; }
/* 导航样式 */
nav { display: inline-block; position: relative; }
.navigation {
.btn:hover, .navigation__item a:hover {
color: #fff;
background: linear-gradient(135deg, rgba(102, 126, 234, 0.25), rgba(118, 75, 162, 0.22), rgba(240, 147, 251, 0.18));
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.15);
border-color: transparent;
opacity: 1;
}
/* 现代化导航样式 */
nav {
display: inline-block;
position: relative;
margin: 0 0;
animation: navFadeIn 0.8s ease-out;
}
@keyframes navFadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.navigation {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
gap: 15px;
margin: 0;
padding: 12px;
list-style-type: none;
background: rgba(255, 255, 255, 0.008);
border-radius: 30px;
backdrop-filter: blur(1px);
-webkit-backdrop-filter: blur(5px);
border: 1px solid rgba(255, 255, 255, 0.08);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);
position: relative;
overflow: hidden;
}
.navigation::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg, transparent 30%, rgba(255, 255, 255, 0.01) 50%, transparent 70%);
animation: shimmer 3s ease-in-out infinite;
}
@keyframes shimmer {
0%, 100% {
transform: translateX(-100%);
}
50% {
transform: translateX(100%);
}
}
.navigation__item {
display: inline-block;
margin: 5px 1px 0 0;
line-height: 1em;
margin: 0;
line-height: 0.5em;
position: relative;
z-index: 2;
}
.navigation__item a {
display: block;
display: inline-block;
padding: 10px 16px;
color: #ffffff;
text-decoration: none;
border-radius: 20px;
font-weight: 450;
font-size: 0.7em;
letter-spacing: 0.5px;
position: relative;
border-color: rgba(255, 255, 255, 0.6);
color: #fff;
opacity: 0.9;
transition: all 0.3s ease;
z-index: 1;
background: rgba(255, 255, 255, 0.008);
border: 0.5px solid rgba(255, 255, 255, 0.06);
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(3px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
.navigation__item a::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.008);
border-radius: 20px;
z-index: -1;
backdrop-filter: blur(3px);
-webkit-backdrop-filter: blur(3px);
margin: 0.5px;
}
/* FAB图标样式 */
.fab {
font-family: 'Font Awesome 6 Brands';
font-weight: 400;
font-family: "Font Awesome 6 Brands" !important;
font-style: normal !important;
font-variant: normal !important;
text-rendering: auto !important;
-webkit-font-smoothing: antialiased !important;
}
/* 社交图标样式 */
.navigation--social .navigation__item a:before {
font-family: 'Font Awesome 6 Brands';
font-weight: 400;
font-size: 1.2em;
}
/* 主导航样式 */
.cover-navigation--primary .navigation__item a {
margin: 0 5px;
padding: 10px 15px;
border-width: 1px;
margin: 0;
position: relative;
z-index: 1;
}
.cover-navigation--primary .navigation__item a:active {
transform: translateY(0);
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.2);
}
/* 社交图标导航样式 - 完全重写版本 */
@@ -463,10 +539,20 @@ nav { display: inline-block; position: relative; }
position: relative;
}
/* 响应式社交图标间距和大小 */
@media screen and (min-width: 1200px) {
/* 导航响应式设计 */
@media screen and (max-width: 1024px) {
.navigation {
padding: 15px;
gap: 12px;
}
.btn, .navigation__item a {
padding: 10px 20px;
font-size: 0.9em;
}
.social-icons-row .social-icon {
margin: 0 3%;
margin: 0 2%;
}
.social-icons-row .social-icon a {
font-size: 1.2em;
@@ -474,6 +560,16 @@ nav { display: inline-block; position: relative; }
}
@media screen and (max-width: 768px) {
.navigation {
padding: 12px;
gap: 10px;
border-radius: 20px;
}
.btn, .navigation__item a {
padding: 8px 16px;
font-size: 0.85em;
letter-spacing: 1px;
}
.social-icons-row .social-icon {
margin: 0 1.5%;
}
@@ -483,6 +579,17 @@ nav { display: inline-block; position: relative; }
}
@media screen and (max-width: 480px) {
.navigation {
padding: 10px;
gap: 8px;
flex-direction: column;
}
.btn, .navigation__item a {
padding: 8px 14px;
font-size: 0.8em;
width: 100%;
text-align: center;
}
.social-icons-row .social-icon {
margin: 0 1%;
}
@@ -497,14 +604,39 @@ nav { display: inline-block; position: relative; }
font-size: 1.2em;
display: inline-block;
background-color: transparent !important;
color: #fff !important;
width: auto;
opacity: 0.9;
transition: opacity 0.3s ease;
opacity: 0.85;
transition: all 0.3s ease;
transform: scale(1);
}
.social-icons-row .social-icon a:hover {
opacity: 1;
transform: scale(1.1);
}
.social-icons-row .social-icon a svg path {
transition: fill 0.3s ease;
}
.social-icons-row .social-icon a[href*="github"]:hover svg path {
fill: url(#github-gradient-hover) !important;
}
.social-icons-row .social-icon a[href*="linkedin"]:hover svg path {
fill: url(#linkedin-gradient-hover) !important;
}
.social-icons-row .social-icon a[href*="twitter"]:hover svg path {
fill: url(#twitter-gradient-hover) !important;
}
.social-icons-row .social-icon a.weixin-link:hover svg path {
fill: url(#wechat-gradient-hover) !important;
}
.social-icons-row .social-icon a[href*="mailto"]:hover svg path {
fill: url(#email-gradient-hover) !important;
}
/* 覆盖社交图标i元素的样式移除小横杠黑点 */
@@ -535,7 +667,8 @@ nav { display: inline-block; position: relative; }
left: auto !important;
}
.social-icons-row .social-icon i {
.social-icons-row .social-icon i,
.social-icons-row .social-icon svg {
position: static;
display: inline-block;
transform: none !important;
@@ -543,6 +676,8 @@ nav { display: inline-block; position: relative; }
height: auto;
background: transparent !important;
border: none !important;
fill: currentColor;
transition: all 0.3s ease;
}
.social-icons-row .social-icon .label {
@@ -555,11 +690,14 @@ nav { display: inline-block; position: relative; }
.social-icons-row .social-icon a:hover {
opacity: 1;
transform: none !important; /* 确保悬停时不移动 */
background-color: transparent !important;
color: #fff !important;
transform: scale(1.1) !important;
background: linear-gradient(135deg, #ff6b6b 0%, #4ecdc4 50%, #45b7d1 100%) !important;
-webkit-background-clip: text !important;
-webkit-text-fill-color: transparent !important;
background-clip: text !important;
letter-spacing: normal !important;
box-shadow: none !important;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3) !important;
border-radius: 50% !important;
}
/* 隐藏社交导航文本名称 */
@@ -694,7 +832,8 @@ nav { display: inline-block; position: relative; }
}
.power a {
color: rgba(255, 255, 255, 0.9);
color: rgba(255, 255, 255, 0.8);
font-size: 0.5em;
text-decoration: none;
transition: color 0.3s ease;
}
@@ -711,11 +850,7 @@ nav { display: inline-block; position: relative; }
color: rgba(255, 255, 255, 0.5);
color: rgba(255, 255, 255, 0.5);
}
/* 微信图标样式 */
.wechat-icon {
position: relative;
cursor: pointer;
}
/* navigation-wrapper 间距调整 */
.navigation-wrapper {

View File

@@ -13,25 +13,24 @@
<meta name="keywords" content="Honesty,HeHouHui,HeHui,明厚">
<meta name="author" content="HeHouHui">
<title>Honesty的主页</title>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/listener-He/Home/css/style.css?version=3">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdmirror.com/gh/listener-He/Home/css/iconfont.css">
<link rel="stylesheet" type="text/css" href="./css/style.css?version=3">
<link rel="stylesheet" type="text/css" href="./css/iconfont.css">
<link rel="apple-touch-icon" href="https://blog-file.hehouhui.cn/bj/logo.png">
<link rel="icon" href="https://cdn.jsdmirror.com/gh/listener-He/Home/favicon.ico?version=1">
<!--引入SweetAlert
<script src="https://fastly.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.min.js"></script>-->
<script src="https://fastly.jsdelivr.net/npm/sweetalert2@10.15.5/dist/sweetalert2.all.min.js"></script>
<script src="https://cdn.jsdmirror.com/npm/sweetalert2@10.15.5/dist/sweetalert2.all.min.js"></script>
<!--引入izitoast-->
<link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/izitoast@1.4.0/dist/css/iziToast.min.css">
<link rel="stylesheet" href="https://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/css/iziToast.min.css">
<script type="text/javascript"
src="https://fastly.jsdelivr.net/npm/izitoast@1.4.0/dist/js/iziToast.min.js"></script>
src="https://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/js/iziToast.min.js"></script>
<!--引入fontawesome-->
<link rel="stylesheet" href="https://fastly.jsdelivr.net/gh/volantis-x/cdn-fontawesome-pro@master/css/all.min.css"
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
media="all">
<!--科技炫酷按钮-->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/listener-He/Home/css/sey.css?version=3">
<!-- <link rel="stylesheet" href="./css/style.css" />-->
<!--IE淘汰计划-->
<script>
@@ -41,12 +40,11 @@
<body oncontextmenu=self.event.returnValue=false onselectstart="return false">
<!-- style="background: url(https://blog-file.hehouhui.cn/bj/1.jpg) center center / cover no-repeat rgb(102, 102, 102);" -->
<header id="panel" class="panel-cover"
>
<header id="panel" class="panel-cover">
<!--星空背景-->
<!-- <canvas id="bg"></canvas> -->
<!--天气-->
<div id="he-plugin-simple"></div>
<!-- <div id="he-plugin-simple"></div> -->
<script>
WIDGET = {
"CONFIG": {
@@ -109,7 +107,7 @@
<nav class="cover-navigation cover-navigation--primary">
<ul class="navigation">
<li class="navigation__item">
<a href="https://about.hehouhui.cn/"><span>关于</span><i></i></a>
<a href="https://about.hehouhui.cn/"><span>关于</span><i></i></a>
</li>
<li class="navigation__item">
<a href="https://blog.hehouhui.cn/"><span>博客</span><i></i></a>
@@ -132,32 +130,98 @@
<div class="social-icons-row">
<div class="social-icon">
<a href="https://github.com/listener-He" title="Github" target="_blank">
<i class="fab fa-github"></i>
<svg width="20" height="20" viewBox="0 0 24 24">
<defs>
<linearGradient id="github-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="github-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#github-gradient)" d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
<span class="label">Github</span>
</a>
</div>
<div class="social-icon">
<a href="https://www.linkedin.com/in/honesty861024" title="Linkedin"
target="_blank">
<i class="fab fa-linkedin"></i>
<svg width="20" height="20" viewBox="0 0 24 24">
<defs>
<linearGradient id="linkedin-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="linkedin-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#linkedin-gradient)" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
</svg>
<span class="label">Linkedin</span>
</a>
</div>
<div class="social-icon">
<a href="https://twitter.com/Honesty861024" title="Twitter" target="_blank">
<i class="fab fa-twitter"></i>
<svg width="20" height="20" viewBox="0 0 24 24">
<defs>
<linearGradient id="twitter-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="twitter-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#twitter-gradient)" d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"/>
</svg>
<span class="label">Twitter</span>
</a>
</div>
<div class="social-icon">
<a onClick="weixin()" title="微信" class="weixin-link">
<i class="fab fa-weixin"></i><span class="label">微信</span>
<svg width="20" height="20" viewBox="0 0 24 24">
<defs>
<linearGradient id="wechat-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="wechat-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#wechat-gradient)" d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 01.213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 00.167-.054l1.903-1.114a.864.864 0 01.717-.098 10.16 10.16 0 002.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18 0 .659-.52 1.188-1.162 1.188-.642 0-1.162-.529-1.162-1.188 0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18 0 .659-.52 1.188-1.162 1.188-.642 0-1.162-.529-1.162-1.188 0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 01.598.082l1.584.926a.272.272 0 00.14.045c.134 0 .24-.111.24-.248 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 01.181-.556c1.52-1.186 2.506-2.952 2.506-4.992 0-3.563-3.359-6.446-7.069-6.446zm-2.496 3.778c.462 0 .837.382.837.853 0 .471-.375.854-.837.854-.462 0-.837-.383-.837-.854 0-.471.375-.853.837-.853zm4.992 0c.462 0 .837.382.837.853 0 .471-.375.854-.837.854-.462 0-.837-.383-.837-.854 0-.471.375-.853.837-.853z"/>
</svg>
<span class="label">微信</span>
</a>
</div>
<div class="social-icon">
<a href="mailto:hehouhui@hehouhui.cn" title="Email">
<i class="fas fa-envelope"></i>
<svg width="20" height="20" viewBox="0 0 24 24">
<defs>
<linearGradient id="email-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
</linearGradient>
<linearGradient id="email-gradient-hover" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#ff6b6b;stop-opacity:1" />
<stop offset="50%" style="stop-color:#4ecdc4;stop-opacity:1" />
<stop offset="100%" style="stop-color:#45b7d1;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#email-gradient)" d="M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-20.728c-.904 0-1.636-.732-1.636-1.636v-13.909c0-.904.732-1.636 1.636-1.636h20.728c.904 0 1.636.732 1.636 1.636zm-1.636-1.636h-20.728l10.364 9.545 10.364-9.545zm0 2.909l-10.364 9.545-10.364-9.545v10.999h20.728v-10.999z"/>
</svg>
<span class="label">Email</span>
</a>
</div>
@@ -240,7 +304,7 @@
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/fetch.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/main.js?version=3"></script>
<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/bj.js?version=3"></script>
<script type="text/javascript" src="js/bj.js"></script>
<!--<script type="text/javascript" src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/moments.js"></script>-->
<script async src="https://analyse.hehouhui.cn/tracker.js" data-ackee-server="https://analyse.hehouhui.cn"
data-ackee-domain-id="7887135f-a413-46e2-a98c-52d4f18d9973"></script>

546
js/about.js Normal file
View File

@@ -0,0 +1,546 @@
// 关于页面JavaScript功能 - 现代动态版本
$(document).ready(function() {
// 初始化所有功能
initGitHubStats();
initBlogArticles();
initVisitorStats();
initArtalkComments();
initPageAnimations();
initTechCloud();
initScrollEffects();
});
// GitHub 统计信息
function initGitHubStats() {
const username = 'listener-He'; // 替换为实际的GitHub用户名
// 获取用户基本信息
fetch(`https://api.github.com/users/${username}`)
.then(response => response.json())
.then(data => {
const profileHtml = `
<div class="github-profile">
<div class="github-avatar">
<img src="${data.avatar_url}" alt="${data.name}">
</div>
<div class="github-info">
<h3>${data.name || data.login}</h3>
<p class="github-bio">${data.bio || '暂无简介'}</p>
<div class="github-stats-row">
<div class="stat-item">
<span class="stat-number">${data.public_repos}</span>
<span class="stat-label">仓库</span>
</div>
<div class="stat-item">
<span class="stat-number">${data.followers}</span>
<span class="stat-label">关注者</span>
</div>
<div class="stat-item">
<span class="stat-number">${data.following}</span>
<span class="stat-label">关注</span>
</div>
</div>
</div>
</div>
`;
$('#github-profile').html(profileHtml);
})
.catch(error => {
console.error('获取GitHub用户信息失败:', error);
$('#github-profile').html('<div class="error">加载GitHub信息失败</div>');
});
// 获取提交统计使用GitHub API的限制这里模拟数据
const commitsHtml = `
<div class="commits-stats">
<h3>提交统计</h3>
<div class="commits-chart">
<div class="commit-item">
<span class="commit-date">本周</span>
<div class="commit-bar">
<div class="commit-fill" style="width: 80%"></div>
</div>
<span class="commit-count">24</span>
</div>
<div class="commit-item">
<span class="commit-date">本月</span>
<div class="commit-bar">
<div class="commit-fill" style="width: 65%"></div>
</div>
<span class="commit-count">156</span>
</div>
<div class="commit-item">
<span class="commit-date">今年</span>
<div class="commit-bar">
<div class="commit-fill" style="width: 90%"></div>
</div>
<span class="commit-count">1,247</span>
</div>
</div>
</div>
`;
$('#github-commits').html(commitsHtml);
}
// 优质项目展示
function initProjects() {
const username = 'listener-He';
fetch(`https://api.github.com/users/${username}/repos?sort=stars&per_page=6`)
.then(response => response.json())
.then(repos => {
const projectsHtml = repos.map(repo => {
const languages = repo.language ? [repo.language] : [];
return `
<div class="project-card" onclick="window.open('${repo.html_url}', '_blank')">
<div class="project-header">
<div>
<h3 class="project-title">${repo.name}</h3>
<p class="project-description">${repo.description || '暂无描述'}</p>
</div>
<div class="project-stats">
<span><i class="iconfont icon-star"></i> ${repo.stargazers_count}</span>
<span><i class="iconfont icon-fork"></i> ${repo.forks_count}</span>
</div>
</div>
<div class="project-languages">
${languages.map(lang => `<span class="language-tag">${lang}</span>`).join('')}
</div>
<div class="project-updated">
更新于 ${new Date(repo.updated_at).toLocaleDateString('zh-CN')}
</div>
</div>
`;
}).join('');
$('#projects-container').html(projectsHtml);
})
.catch(error => {
console.error('获取GitHub项目失败:', error);
$('#projects-container').html('<div class="error">加载项目信息失败</div>');
});
}
// 博客文章RSS解析
function initBlogArticles() {
const rssUrl = 'https://blog.hehouhui.cn/rss/feed.xml';
const cacheKey = 'blog_articles_cache';
const cacheTimeKey = 'blog_articles_cache_time';
// 检查缓存
const cachedData = localStorage.getItem(cacheKey);
const cacheTime = localStorage.getItem(cacheTimeKey);
const today = new Date().toDateString();
if (cachedData && cacheTime === today) {
// 使用缓存数据
displayBlogArticles(JSON.parse(cachedData));
return;
}
// 清除过期缓存并重新获取
localStorage.removeItem(cacheKey);
localStorage.removeItem(cacheTimeKey);
// 使用代理服务获取RSS数据
const proxyUrl = `https://api.allorigins.win/get?url=${encodeURIComponent(rssUrl)}`;
fetch(proxyUrl)
.then(response => response.json())
.then(data => {
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(data.contents, 'text/xml');
const items = xmlDoc.querySelectorAll('item');
const articles = Array.from(items).slice(0, 6).map(item => {
const title = item.querySelector('title')?.textContent || '';
const link = item.querySelector('link')?.textContent || '';
const description = item.querySelector('description')?.textContent || '';
const pubDate = item.querySelector('pubDate')?.textContent || '';
const category = item.querySelector('category')?.textContent || '技术分享';
// 提取摘要去除HTML标签
const excerpt = description.replace(/<[^>]*>/g, '').substring(0, 150) + '...';
return {
title,
excerpt,
link,
pubDate: new Date(pubDate).toLocaleDateString('zh-CN'),
category
};
});
// 缓存数据
localStorage.setItem(cacheKey, JSON.stringify(articles));
localStorage.setItem(cacheTimeKey, today);
displayBlogArticles(articles);
})
.catch(error => {
console.error('获取RSS数据失败:', error);
// 降级到模拟数据
const fallbackArticles = [
{
title: "向量数据库全攻略:从算法公式到选型指南,一篇吃透高维数据存储术",
excerpt: "深入探讨向量数据库的核心算法、应用场景和选型策略,帮助开发者掌握高维数据存储的关键技术...",
link: "https://blog.hehouhui.cn/posts/vector-database-guide",
pubDate: "2025-01-02",
category: "技术分享"
},
{
title: "CompletableFuture 从源码到实战:让异步编程像喝奶茶一样丝滑",
excerpt: "全面解析CompletableFuture的源码实现和实战应用让Java异步编程变得简单优雅...",
link: "https://blog.hehouhui.cn/posts/completablefuture-guide",
pubDate: "2025-01-02",
category: "Java开发"
},
{
title: "从规范到架构:一篇读懂 Java 工程建模、分层、命名与演进之路",
excerpt: "深入讲解Java工程的规范化建设包括项目结构、分层架构、命名规范等最佳实践...",
link: "https://blog.hehouhui.cn/posts/java-project-architecture",
pubDate: "2025-01-01",
category: "架构设计"
}
];
displayBlogArticles(fallbackArticles);
});
}
function displayBlogArticles(articles) {
const articlesHtml = articles.map(article => `
<div class="article-card" onclick="window.open('${article.link}', '_blank')">
<h3 class="article-title">${article.title}</h3>
<p class="article-excerpt">${article.excerpt}</p>
<div class="article-meta">
<span class="article-category">${article.category}</span>
<span class="article-date">${new Date(article.pubDate).toLocaleDateString('zh-CN')}</span>
</div>
</div>
`).join('');
$('#blog-container').html(articlesHtml);
}
// 访问统计(百度统计集成)
function initVisitorStats() {
// 这里需要集成百度统计API
// 由于百度统计API需要认证这里使用模拟数据
const mockStats = {
totalVisitors: 12580,
totalVisits: 25640,
todayVisitors: 156,
todayVisits: 234
};
// 动画显示数字
animateNumber('#total-visitors', mockStats.totalVisitors);
animateNumber('#total-visits', mockStats.totalVisits);
animateNumber('#today-visitors', mockStats.todayVisitors);
animateNumber('#today-visits', mockStats.todayVisits);
}
// 数字动画效果
function animateNumber(selector, targetNumber) {
const element = $(selector);
const duration = 2000;
const steps = 60;
const increment = targetNumber / steps;
let current = 0;
const timer = setInterval(() => {
current += increment;
if (current >= targetNumber) {
current = targetNumber;
clearInterval(timer);
}
element.text(Math.floor(current).toLocaleString());
}, duration / steps);
}
// 评论系统初始化
function initArtalkComments() {
// 初始化 Artalk 评论系统
if (typeof Artalk !== 'undefined') {
const artalk = Artalk.init({
el: '#artalk-container',
pageKey: window.location.pathname,
pageTitle: document.title,
server: 'https://your-artalk-server.com', // 替换为实际的Artalk服务器地址
site: 'Honesty的主页',
placeholder: '来说点什么吧...',
noComment: '暂无评论',
sendBtn: '发送',
darkMode: false,
gravatar: {
mirror: 'https://cravatar.cn/avatar/'
},
pagination: {
pageSize: 20,
readMore: true,
autoLoad: true
},
heightLimit: {
content: 300,
children: 400
},
imgUpload: false,
preview: true,
versionCheck: true
});
// 自定义样式
setTimeout(() => {
const atkMain = document.querySelector('.atk-main');
if (atkMain) {
atkMain.style.borderRadius = '15px';
atkMain.style.overflow = 'hidden';
}
}, 1000);
}
}
// 技术云图初始化
function initTechCloud() {
const techItems = [
// 内层轨道 - 核心技能
{ name: 'JavaScript', level: 'primary', orbit: 1 },
{ name: 'Python', level: 'primary', orbit: 1 },
{ name: 'React', level: 'primary', orbit: 1 },
// 中层轨道 - 熟练技能
{ name: 'Node.js', level: 'secondary', orbit: 2 },
{ name: 'Vue.js', level: 'secondary', orbit: 2 },
{ name: 'TypeScript', level: 'secondary', orbit: 2 },
{ name: 'MySQL', level: 'secondary', orbit: 2 },
// 外层轨道 - 工具技能
{ name: 'Docker', level: 'tertiary', orbit: 3 },
{ name: 'Git', level: 'tertiary', orbit: 3 },
{ name: 'Linux', level: 'tertiary', orbit: 3 },
{ name: 'AWS', level: 'tertiary', orbit: 3 },
{ name: 'MongoDB', level: 'tertiary', orbit: 3 },
{ name: 'Redis', level: 'tertiary', orbit: 3 }
];
// 动态生成技术项目
techItems.forEach((tech, index) => {
const orbit = $(`.orbit-${tech.orbit}`);
const techElement = $(`<div class="tech-item ${tech.level}">${tech.name}</div>`);
orbit.append(techElement);
});
}
// 滚动效果
function initScrollEffects() {
// 导航栏滚动效果
let lastScrollTop = 0;
$(window).scroll(function() {
const scrollTop = $(this).scrollTop();
const navbar = $('.navbar');
// 添加滚动样式
if (scrollTop > 50) {
navbar.addClass('scrolled');
} else {
navbar.removeClass('scrolled');
}
// 隐藏/显示导航栏
if (scrollTop > lastScrollTop && scrollTop > 100) {
navbar.css('transform', 'translateY(-100%)');
} else {
navbar.css('transform', 'translateY(0)');
}
lastScrollTop = scrollTop;
});
}
// 页面动画效果
function initPageAnimations() {
// 滚动显示动画
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
entry.target.classList.add('animate-in');
}
});
}, observerOptions);
// 观察所有区域
document.querySelectorAll('.hero-section, .tech-cloud-section, .personality-timeline-section, .github-showcase-section, .blog-waterfall-section, .contact-floating-section, .comments-section').forEach(section => {
section.style.opacity = '0';
section.style.transform = 'translateY(50px)';
section.style.transition = 'opacity 0.8s ease, transform 0.8s ease';
observer.observe(section);
});
// 数字动画
function animateNumbers() {
$('.stat-number').each(function() {
const $this = $(this);
const target = parseInt($this.text().replace(/[^0-9]/g, ''));
const duration = 2000;
const step = target / (duration / 16);
let current = 0;
const timer = setInterval(() => {
current += step;
if (current >= target) {
current = target;
clearInterval(timer);
}
$this.text(Math.floor(current).toLocaleString());
}, 16);
});
}
// 当英雄区域进入视野时开始数字动画
const heroObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
animateNumbers();
heroObserver.unobserve(entry.target);
}
});
});
const heroSection = document.querySelector('.hero-section');
if (heroSection) {
heroObserver.observe(heroSection);
}
}
// 添加GitHub统计的CSS样式
const githubStyles = `
<style>
.github-profile {
display: flex;
align-items: center;
gap: 1rem;
}
.github-avatar img {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
}
.github-info h3 {
margin: 0 0 0.5rem 0;
color: #333;
}
.github-bio {
color: #666;
margin-bottom: 1rem;
font-size: 0.9rem;
}
.github-stats-row {
display: flex;
gap: 1rem;
}
.stat-item {
text-align: center;
}
.stat-item .stat-number {
display: block;
font-size: 1.2rem;
font-weight: 600;
color: #333;
}
.stat-item .stat-label {
font-size: 0.8rem;
color: #666;
}
.commits-stats h3 {
margin-bottom: 1rem;
color: #333;
}
.commit-item {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 0.8rem;
}
.commit-date {
width: 60px;
font-size: 0.9rem;
color: #666;
}
.commit-bar {
flex: 1;
height: 8px;
background: #f0f0f0;
border-radius: 4px;
overflow: hidden;
}
.commit-fill {
height: 100%;
background: linear-gradient(135deg, #667eea, #764ba2);
border-radius: 4px;
transition: width 0.3s ease;
}
.commit-count {
width: 40px;
text-align: right;
font-size: 0.9rem;
font-weight: 600;
color: #333;
}
.error {
text-align: center;
color: #999;
font-style: italic;
padding: 2rem;
}
.project-updated {
margin-top: 1rem;
font-size: 0.8rem;
color: #888;
}
.article-category {
background: rgba(102, 126, 234, 0.1);
color: #667eea;
padding: 0.2rem 0.6rem;
border-radius: 12px;
font-size: 0.8rem;
}
</style>
`;
// 添加样式到页面
$('head').append(githubStyles);
// 错误处理
window.addEventListener('error', function(e) {
console.error('页面错误:', e.error);
});
// 页面加载完成提示
$(window).on('load', function() {
console.log('关于我页面加载完成');
});

View File

@@ -3,19 +3,24 @@ var stars_count;
var stars;
ini();
makeStars();
var interval=setInterval(function(){drawStars();},50);//<2F><>ʱˢ<CAB1><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var interval=setInterval(function(){drawStars();},50);//<2F><>ʱˢ<CAB1><CBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
function ini(){//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
canvas = document.getElementById("starfield");
function ini(){//初始化
canvas = document.getElementById("bg");
if (!canvas) {
console.warn('Canvas element with id "bg" not found');
return;
}
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
context = canvas.getContext("2d");
stars = Array();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
stars_count = 300;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
stars = Array();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
stars_count = 300;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
clearInterval(interval);
}
function makeStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
function makeStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!canvas) return;
for(var i=0;i<stars_count;i++)
{
let x=Math.random() * canvas.offsetWidth;
@@ -23,12 +28,13 @@ function makeStars(){//
let radius = Math.random()*0.8;
let color="rgba("+Math.random()*255+","+Math.random()*255+","+Math.random()*255+",0.8)";
let speed=Math.random()*0.5;
let arr={'x':x,'y':y,'radius':radius,'color':color,'speed':speed};//<2F><>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
stars.push(arr);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
let arr={'x':x,'y':y,'radius':radius,'color':color,'speed':speed};//<2F><>x,y,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ٶȣ<D9B6>
stars.push(arr);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
function drawStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
function drawStars(){//<2F><><EFBFBD><EFBFBD><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!canvas || !context) return;
context.fillStyle = "#0e1729";
context.fillRect(0,0,canvas.width,canvas.height);
for (var i = 0; i < stars.length; i++) {
@@ -44,7 +50,7 @@ function drawStars(){//
}
}
window.onresize = function(){//<2F><><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
window.onresize = function(){//<2F><><EFBFBD>ڴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ini();
makeStars();
interval=setInterval(function(){drawStars();},50);

66
rss.xml Normal file
View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Honesty的博客</title>
<link>https://blog.hehouhui.cn</link>
<description>分享技术心得与生活感悟</description>
<language>zh-CN</language>
<lastBuildDate>Mon, 15 Jan 2024 10:00:00 +0800</lastBuildDate>
<atom:link href="https://blog.hehouhui.cn/rss.xml" rel="self" type="application/rss+xml" />
<item>
<title>现代Web开发最佳实践</title>
<link>https://blog.hehouhui.cn/posts/modern-web-development</link>
<description>探讨现代Web开发中的最佳实践包括性能优化、安全性考虑和用户体验设计。从前端框架选择到后端架构设计全面分析如何构建高质量的Web应用程序。</description>
<pubDate>Mon, 15 Jan 2024 09:00:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/modern-web-development</guid>
<category>技术分享</category>
</item>
<item>
<title>JavaScript异步编程深度解析</title>
<link>https://blog.hehouhui.cn/posts/javascript-async-programming</link>
<description>深入理解JavaScript中的异步编程模式从回调函数到Promise再到async/await。通过实际案例分析异步编程的最佳实践和常见陷阱。</description>
<pubDate>Wed, 10 Jan 2024 14:30:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/javascript-async-programming</guid>
<category>前端开发</category>
</item>
<item>
<title>开源项目贡献指南</title>
<link>https://blog.hehouhui.cn/posts/open-source-contribution-guide</link>
<description>如何有效地为开源项目做贡献,包括代码规范、提交流程和社区交流技巧。分享从新手到贡献者的成长路径和实用建议。</description>
<pubDate>Fri, 05 Jan 2024 16:45:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/open-source-contribution-guide</guid>
<category>开源</category>
</item>
<item>
<title>React性能优化实战技巧</title>
<link>https://blog.hehouhui.cn/posts/react-performance-optimization</link>
<description>React应用性能优化的实战技巧包括组件优化、状态管理、代码分割等方面。通过具体案例展示如何提升React应用的运行效率。</description>
<pubDate>Tue, 02 Jan 2024 11:20:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/react-performance-optimization</guid>
<category>前端开发</category>
</item>
<item>
<title>Node.js微服务架构设计</title>
<link>https://blog.hehouhui.cn/posts/nodejs-microservices-architecture</link>
<description>基于Node.js的微服务架构设计原则和实践经验。涵盖服务拆分、通信机制、数据一致性和监控等关键技术点。</description>
<pubDate>Sun, 28 Dec 2023 13:15:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/nodejs-microservices-architecture</guid>
<category>后端开发</category>
</item>
<item>
<title>CSS Grid布局完全指南</title>
<link>https://blog.hehouhui.cn/posts/css-grid-complete-guide</link>
<description>CSS Grid布局的完整学习指南从基础概念到高级应用。通过丰富的示例展示Grid布局在现代Web设计中的强大功能。</description>
<pubDate>Thu, 21 Dec 2023 15:30:00 +0800</pubDate>
<guid>https://blog.hehouhui.cn/posts/css-grid-complete-guide</guid>
<category>前端开发</category>
</item>
</channel>
</rss>