Files
home/index.html
hehh 532cbafd8e feat(audio): 重构音频播放功能以支持iframe隔离播放
- 将音频播放器移至独立的iframe中以提升性能和隔离性
- 实现主页面与iframe之间的postMessage通信机制
- 添加音频播放状态同步和UI更新逻辑
- 支持自动播放控制和用户交互检测
- 实现播放状态持久化存储和恢复功能
- 优化移动端音频控制体验
- 添加版权信息更新和国际化支持
2025-11-30 16:42:00 +08:00

439 lines
25 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<!-- 基础信息 -->
<meta lang="zh-cmn-Hans">
<meta charset="utf-8">
<meta name="renderer" content="webkit"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="force-rendering" content="webkit"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Honesty的主页,HeHouHui的主页,HeHui的主页,明厚的主页">
<meta name="keywords" content="Honesty,HeHouHui,HeHui,明厚">
<meta name="author" content="Honesty">
<!-- 社交平台分享优化 -->
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://www.hehouhui.cn/">
<meta property="og:title" content="Honesty的主页 - Java后端 & AI工程师">
<meta property="og:description"
content="我是Honesty一名充满热情的Java后端开发工程师专注于AI技术的探索与应用。来自湖南现在上海工作享受在这座充满活力的城市中追求技术梦想。">
<meta property="og:image" content="images/avatar.jpeg">
<meta property="og:site_name" content="Honesty的主页">
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:url" content="https://www.hehouhui.cn/">
<meta property="twitter:title" content="Honesty的主页 - Java后端 & AI工程师">
<meta property="twitter:description"
content="我是Honesty一名充满热情的Java后端开发工程师专注于AI技术的探索与应用。来自湖南现在上海工作享受在这座充满活力的城市中追求技术梦想。">
<meta property="twitter:image" content="https://www.hehouhui.cn/images/avatar.jpeg">
<meta property="twitter:site" content="@Honesty861024">
<!-- 微信小程序/朋友圈分享 -->
<meta property="wechat:image" content="https://www.hehouhui.cn/images/avatar.jpeg">
<meta property="wechat:title" content="Honesty的主页 - Java后端 & AI工程师">
<meta property="wechat:description"
content="我是Honesty一名充满热情的Java后端开发工程师专注于AI技术的探索与应用。">
<title>Honesty的主页</title>
<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="./images/logo.png">
<link rel="icon" href="favicon.ico?version=1">
<!--引入SweetAlert
<script src="https://fastly.jsdelivr.net/npm/sweetalert@2.1.2/dist/sweetalert.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://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/css/iziToast.min.css">
<script type="text/javascript"
src="https://cdn.jsdmirror.com/npm/izitoast@1.4.0/dist/js/iziToast.min.js"></script>
<!--引入fontawesome-->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"
media="all">
<!--IE淘汰计划-->
<script>
if (/*@cc_on!@*/false || (!!window.MSInputMethodContext && !!document.documentMode)) window.location.href = "https://imsyy.top/upgrade-your-browser/index.html?referrer=" + encodeURIComponent(window.location.href);
</script>
</head>
<body>
<header id="panel" class="panel-cover">
<script>
WIDGET = {
"CONFIG": {
"modules": "01234",
"background": "5",
"tmpColor": "FFFFFF",
"tmpSize": "16",
"cityColor": "FFFFFF",
"citySize": "16",
"aqiColor": "FFFFFF",
"aqiSize": "16",
"weatherIconSize": "24",
"alertIconSize": "18",
"padding": "10px 10px 10px 10px",
"shadow": "1",
"language": "auto",
"borderRadius": "10",
"fixed": "false",
"vertical": "top",
"horizontal": "left",
"key": "782f2e580ace4a91bab6390d7d726f04"
}
}
</script>
<div class="panel-main">
<div class="panel-main__inner panel-inverted">
<div class="panel-main__content">
<div class="ih-item circle effect right_to_left" id="avatar">
<a class="blog-button">
<div class="img"><img
src="images/avatar.jpeg"
alt="img"
class="js-avatar iUp profilepic header-logo">
</div>
<div class="info iUp">
<div class="info-back">
<img alt="img" src="images/kl.gif"
class="js-avatar profilepic" loading="lazy">
</div>
</div>
</a>
</div>
<h1 class="panel-cover__title panel-title iUp">
<!-- <br/>Honesty-->
</h1>
<!-- <p class="panel-cover__subtitle panel-subtitle iUp">众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。</p>-->
<p class="panel-cover__subtitle panel-subtitle iUp"></p>
<!-- <canvas class="navigation-wrapper iUp" id="canvas" style="width:50%;padding-top:0px;" width="920"-->
<!-- height="350"></canvas>-->
<!-- <script src="https://cdn.jsdmirror.com/gh/listener-He/Home/js/clock.js"></script>-->
<!-- 横线已移除 -->
<!--一言无法显示时的文字-->
<p id="description" style="margin-top: 10%" class="panel-cover__description iUp">人生天地之间,若白驹之过隙,忽然而已。
<br/>
<strong>-「Honesty」</strong>
</p>
<div class="navigation-wrapper iUp">
<div>
<nav class="cover-navigation cover-navigation--primary">
<ul class="navigation">
<li class="navigation__item">
<a href="./about.html"><span>关于我</span><i></i></a>
</li>
<li class="navigation__item">
<a href="https://blog.hehouhui.cn/"><span>博客</span><i></i></a>
</li>
<li class="navigation__item">
<a href="https://moments.hehouhui.cn" class="moments-link"><span>瞬间</span><i></i></a>
</li>
<li class="navigation__item">
<a href="javascript:void(0)"><span>简历</span><i></i></a>
</li>
</ul>
</nav>
</div>
<div>
<div class="social-icons-row">
<div class="social-icon">
<a href="https://github.com/listener-He" title="Github" target="_blank">
<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">
<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">
<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">
<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">
<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>
</div>
</div>
</div>
</div>
</div>
<div class="panel-cover--overlay cover-slate"></div>
<div class="weixin-qrcode-overlay" id="weixinOverlay">
<div class="weixin-qrcode-container">
<div class="weixin-qrcode-title">扫描二维码</div>
<div class="weixin-qrcode-desc">请使用微信扫一扫添加关注</div>
<img src="./images/mp-honesy.jpg" alt="微信二维码"
class="weixin-qrcode-image"
onerror="this.src='https://cdn.jsdmirror.com/gh/listener-He/Home/images/logo.png'; this.alt='二维码加载失败'" loading="lazy">
<button class="weixin-qrcode-close" onclick="closeWeixin()">关闭</button>
</div>
</div>
<script>
function weixin() {
const overlay = document.getElementById('weixinOverlay');
overlay.style.display = 'flex';
// 防止滚动穿透
document.body.style.overflow = 'hidden';
// 添加ESC键关闭
document.addEventListener('keydown', closeOnEsc, { passive: false });
}
function closeWeixin() {
const overlay = document.getElementById('weixinOverlay');
overlay.style.display = 'none';
// 恢复滚动
document.body.style.overflow = '';
// 移除ESC键监听
document.removeEventListener('keydown', closeOnEsc, { passive: false });
}
function closeOnEsc(e) {
if (e.key === 'Escape') {
closeWeixin();
}
}
// 点击空白处关闭
document.getElementById('weixinOverlay').addEventListener('click', function (e) {
if (e.target === this) {
closeWeixin();
}
}, { passive: false });
// 阻止点击弹框内容时关闭
document.querySelector('.weixin-qrcode-container').addEventListener('click', function (e) {
e.stopPropagation();
}, { passive: false });
</script>
</div>
<div class="remark iUp">
<p class="power">
<a class="icp" href="https://beian.miit.gov.cn/" target="_blank">湘ICP备20014902号</a>
</p>
<p class="power">Copyright © 2018<span id="currentYear"></span> Honesty</p>
<script>
document.getElementById("currentYear").textContent = ' - ' + new Date().getFullYear();
</script>
<p class="power">Powered By
<a href="https://pages.edgeone.ai/" target="_blank"> Tencent EdgeOne </a> And
<a href="https://hitokoto.cn/" target="_blank"> Hitokoto </a>
</p>
</div>
</header>
<!-- iframe容器 -->
<div id="moments-container" style="display: none;">
<iframe id="moment-frame" src="" width="100%" height="500px" frameborder="0"></iframe>
</div>
<!-- 遮罩层 -->
<div class="overlay"></div>
<!--黑暗主题-->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/fetch.min.js"></script>
<script type="text/javascript" src="js/config.js"></script>
<script type="text/javascript" src="js/main.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>
<!-- 不蒜子统计 -->
<script>
document.addEventListener('DOMContentLoaded', function () {
// 动态加载不蒜子统计脚本
const script = document.createElement('script');
script.src = SiteConfig.analytics.busuanzi.src;
script.async = true;
document.head.appendChild(script);
});
</script>
<!-- 百度站点统计 -->
<script>
try {
const script = document.createElement("script");
script.src = SiteConfig.analytics.baidu.src;
script.defer = true;
document.head.appendChild(script);
script.onload = function () {
if (typeof _hmt !== 'undefined') {
_hmt.push(['_setAccount', SiteConfig.analytics.baidu.id]);
}
};
} catch (e) {
console.log("百度统计错误", e);
}
</script>
<!-- Google Analytics -->
<script type="text/javascript">
// 定义 gtag 函数作为安全兜底
try {
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
} catch (e) {
console.log("Google Analytics Init 错误", e);
}
</script>
<!-- 再异步加载 Google 的 gtag.js -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-DYWDEVKDP0"></script>
<!-- 可选:继续调用 config -->
<script type="text/javascript">
try {
gtag('config', SiteConfig.analytics.google.id);
} catch (e) {
console.error("Google Analytics config 失败", e);
}
</script>
<script>
!function (p) {
"use strict";
!function (t) {
var s = window, e = document, i = p,
c = "".concat("https:" === e.location.protocol ? "https://" : "http://", "sdk.51.la/js-sdk-pro.min.js"),
n = e.createElement("script"), r = e.getElementsByTagName("script")[0];
n.type = "text/javascript", n.setAttribute("charset", "UTF-8"), n.async = !0, n.src = c, n.id = "LA_COLLECT", i.d = n;
var o = function () {
s.LA.ids.push(i)
};
s.LA ? s.LA.ids && o() : (s.LA = p, s.LA.ids = [], o()), r.parentNode.insertBefore(n, r)
}()
}({id: SiteConfig.analytics.tencent.id, ck: SiteConfig.analytics.tencent.ck});
</script>
<!-- 隐藏的音频播放iframe -->
<iframe id="audio-player-iframe" src="audio-player.html" style="display: none;"></iframe>
<script>
// 音频控制逻辑
let audioIframe = document.getElementById('audio-player-iframe');
// 监听来自iframe的消息
window.addEventListener('message', function(event) {
// 确保消息来自我们的iframe
if (event.source !== audioIframe.contentWindow) return;
const data = event.data;
if (data.playing && data.action === 'playerReady') {
// iframe准备就绪设置初始音频
audioIframe.contentWindow.postMessage({
action: 'setTrack',
src: 'data/至少做一件离谱的事-Kiri T_compressed.mp3'
}, '*');
}
});
</script>
</body>
</html>