feat(about): 优化夜间主题样式及统计数据显示逻辑
- 为夜间主题的区域统计添加悬停效果 - 修复CSS语法错误,移除多余闭合括号 - 调整GitHub仓库拉取逻辑,增加超时控制和排序方式 - 修改展示仓库数量从12个至16个 - 移除页面访问量的格式化函数及相关调用 - 删除冗余的数据格式化脚本,简化加载逻辑
This commit is contained in:
42
about.html
42
about.html
@@ -366,37 +366,7 @@
|
||||
|
||||
<!-- 自动格式化脚本 -->
|
||||
<script>
|
||||
// 核心格式化函数:支持 K / W / M,保留最多两位小数,去除尾随零
|
||||
function formatWithUnit(num) {
|
||||
if (num && num.indexOf('禁用') >= 0) {
|
||||
return '-';
|
||||
}
|
||||
num = Number(num);
|
||||
if (isNaN(num) || num < 0) return '0';
|
||||
|
||||
// 小于 1000:直接显示
|
||||
if (num < 1_000) {
|
||||
return Math.floor(num).toString();
|
||||
}
|
||||
|
||||
// 1K ~ 9.99K
|
||||
if (num < 10_000) {
|
||||
let val = (num / 1_000).toFixed(2);
|
||||
return parseFloat(val) + 'K';
|
||||
}
|
||||
|
||||
// 1W ~ 99.99W (1W = 10,000)
|
||||
if (num < 1_000_000) {
|
||||
let val = (num / 10_000).toFixed(2);
|
||||
return parseFloat(val) + 'W';
|
||||
}
|
||||
|
||||
// ≥ 1M
|
||||
let val = (num / 1_000_000).toFixed(2);
|
||||
return parseFloat(val) + 'M';
|
||||
}
|
||||
|
||||
// 监听不蒜子数据更新并格式化
|
||||
// 监听不蒜子数据的错误兜底
|
||||
function initFormatter() {
|
||||
const pvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_pv_id);
|
||||
const uvEl = document.getElementById(SiteConfig.analytics.busuanzi.site_uv_id);
|
||||
@@ -409,22 +379,12 @@
|
||||
pvEl.textContent = '-';
|
||||
return;
|
||||
}
|
||||
const raw = pvEl.textContent.trim().replace(/[,,]/g, '');
|
||||
const num = parseFloat(raw);
|
||||
if (!isNaN(num)) {
|
||||
pvEl.textContent = formatWithUnit(num);
|
||||
}
|
||||
}
|
||||
if (uvEl?.textContent) {
|
||||
if (uvEl.textContent.includes('禁用')) {
|
||||
uvEl.textContent = '-';
|
||||
return;
|
||||
}
|
||||
const raw = uvEl.textContent.trim().replace(/[,,]/g, '');
|
||||
const num = parseFloat(raw);
|
||||
if (!isNaN(num)) {
|
||||
uvEl.textContent = formatWithUnit(num);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -1822,6 +1822,11 @@ body {
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
[data-theme="night"] .area-stats:hover {
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 0 15px var(--accent-glow);
|
||||
}
|
||||
|
||||
[data-theme="night"] .stat-item {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
@@ -1836,6 +1841,8 @@ body {
|
||||
text-shadow: 0 0 10px var(--accent-glow);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[data-theme="night"] .stat-key {
|
||||
color: var(--text-secondary);
|
||||
text-shadow: 0 0 5px rgba(255, 255, 255, 0.1);
|
||||
@@ -2303,7 +2310,7 @@ body {
|
||||
-webkit-text-fill-color: initial;
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.interest-list {
|
||||
display: grid;
|
||||
|
||||
22
js/about.js
22
js/about.js
@@ -273,13 +273,13 @@ class DataManager {
|
||||
let allRepos = [];
|
||||
let page = 1;
|
||||
const perPage = 100;
|
||||
while (page <= 10) { // 最多抓取1000条,直到满足条件或为空
|
||||
const rRes = await this.fetchWithTimeout(`https://api.github.com/users/${user}/repos?sort=stars&per_page=${perPage}&page=${page}`, { timeout: 5000 });
|
||||
while (page <= 50) { // 最多抓取500条,直到满足条件或为空
|
||||
const rRes = await this.fetchWithTimeout(`https://api.github.com/users/${user}/repos?sort=pushed&direction=desc&per_page=${perPage}&page=${page}`, { timeout: 3000 });
|
||||
if (!rRes.ok) break;
|
||||
const repos = await rRes.json();
|
||||
if (!Array.isArray(repos) || repos.length === 0) break;
|
||||
allRepos = allRepos.concat(repos);
|
||||
if (repos.length < perPage || allRepos.length >= 1000) break; // 足量
|
||||
if (repos.length < perPage || allRepos.length >= 500) break; // 足量
|
||||
page++;
|
||||
}
|
||||
let repoData = allRepos.length ? allRepos : (window.SiteConfig?.defaults?.repos);
|
||||
@@ -289,7 +289,7 @@ class DataManager {
|
||||
repoData = repoData
|
||||
.filter(repo => !repo.fork && (repo.stargazers_count > 0 || repo.forks_count > 0))
|
||||
.sort((a, b) => (b.stargazers_count || 0) - (a.stargazers_count || 0))
|
||||
.slice(0, 12); // 只取前12个
|
||||
.slice(0, 16); // 只取前16个
|
||||
}
|
||||
|
||||
const slimUser = {
|
||||
@@ -328,22 +328,10 @@ class DataManager {
|
||||
});
|
||||
}
|
||||
|
||||
formatVisitors() {
|
||||
const siteVisitorDom = window.document.getElementById('busuanzi_value_site_pv');
|
||||
if (siteVisitorDom) {
|
||||
let count = siteVisitorDom.innerText;
|
||||
if (count && count.length > 3) {
|
||||
// 格式化 k,w m等单位 支持两位小数点
|
||||
count = count.replace(/(\d)(?=(\d{3})+$)/g, '$1,');
|
||||
count = count.replace(/(\d+)(?=(\d{3})+(?:\.\d+)?$)/g, '$0 ');
|
||||
siteVisitorDom.innerText = count;
|
||||
}
|
||||
}
|
||||
}
|
||||
renderRepos(list) {
|
||||
if (!Array.isArray(list)) list = window.SiteConfig?.defaults?.repos;
|
||||
let html = '';
|
||||
list.slice(0, 12).forEach(repo => {
|
||||
list.forEach(repo => {
|
||||
// Fix: API field compatibility
|
||||
const stars = repo.stargazers_count !== undefined ? repo.stargazers_count : (repo.stars || 0);
|
||||
const forks = repo.forks_count !== undefined ? repo.forks_count : (repo.forks || 0);
|
||||
|
||||
Reference in New Issue
Block a user