From d31d35f81a91360e528906f0fb4d745348d2e250 Mon Sep 17 00:00:00 2001 From: chicrobot Date: Fri, 14 Nov 2025 23:22:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=B7=B3=E8=BD=AC=E4=B8=BA?= =?UTF-8?q?=E6=96=B0=E7=AA=97=E5=8F=A3=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 56 +++++++++++++++++++++++++++++++----------------------- script.js | 54 +++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 73 insertions(+), 37 deletions(-) diff --git a/index.html b/index.html index b93f398..121e6ef 100644 --- a/index.html +++ b/index.html @@ -59,42 +59,42 @@

Portainer

容器管理平台

运行中 - 访问 + 访问

Gitea

代码托管平台

运行中 - 访问 + 访问

Grafana

数据可视化工具

运行中 - 访问 + 访问

Jenkins

持续集成/持续部署

运行中 - 访问 + 访问

PostgreSQL

关系型数据库

运行中 - 访问 + 访问

Traefik

反向代理与负载均衡

运行中 - 访问 + 访问
@@ -151,25 +151,25 @@

VS Code

集成开发环境

- 启动 + 启动

终端

命令行工具集

- 打开 + 打开

数据库管理

数据库可视化工具

- 启动 + 启动

服务管理

开发服务控制面板

- 打开 + 打开
@@ -219,7 +219,7 @@

最新思路

-
+

赛博朋克时代的前端架构思考

@@ -228,7 +228,7 @@ 继续阅读
-
@@ -287,8 +295,8 @@

摄影师

独立摄影 | 数字游民

- - + +
@@ -297,8 +305,8 @@

开发者

全栈开发 | 技术作家

- - + +
@@ -307,8 +315,8 @@

设计师

UI/UX设计 | 创意大师

- - + +
@@ -317,8 +325,8 @@

音乐人

音频工程 | 音乐制作人

- - + +
diff --git a/script.js b/script.js index f57cc4c..1324bf6 100644 --- a/script.js +++ b/script.js @@ -51,11 +51,28 @@ window.addEventListener('load', function() { const giteaUrl = `${window.location.protocol}//${currentHost}:3000`; const grafanaUrl = `${window.location.protocol}//${currentHost}:3001`; const jenkinsUrl = `${window.location.protocol}//${currentHost}:9095`; - // 设置链接的href属性 - document.getElementById('portainerLink').href = portainerUrl; - document.getElementById('giteaLink').href = giteaUrl; - document.getElementById('grafanaLink').href = grafanaUrl; - document.getElementById('jenkinsLink').href = jenkinsUrl; + // 设置链接的href属性和target属性,确保在新标签中打开 + const portainerLink = document.getElementById('portainerLink'); + const giteaLink = document.getElementById('giteaLink'); + const grafanaLink = document.getElementById('grafanaLink'); + const jenkinsLink = document.getElementById('jenkinsLink'); + + if (portainerLink) { + portainerLink.href = portainerUrl; + portainerLink.target = '_blank'; + } + if (giteaLink) { + giteaLink.href = giteaUrl; + giteaLink.target = '_blank'; + } + if (grafanaLink) { + grafanaLink.href = grafanaUrl; + grafanaLink.target = '_blank'; + } + if (jenkinsLink) { + jenkinsLink.href = jenkinsUrl; + jenkinsLink.target = '_blank'; + } }); // 粒子背景效果 @@ -358,13 +375,20 @@ serviceCards.forEach(card => { }); }); -// 平滑滚动 -document.querySelectorAll('a[href^="#"]').forEach(anchor => { +// 平滑滚动和链接处理 +document.querySelectorAll('a').forEach(anchor => { anchor.addEventListener('click', function (e) { - const targetId = this.getAttribute('href'); - // 检查是否是有效的ID选择器(以#开头且不是URL) - if (targetId && targetId.startsWith('#') && targetId.length > 1 && !targetId.includes('://')) { - const targetElement = document.querySelector(targetId); + const href = this.getAttribute('href'); + const target = this.getAttribute('target'); + + // 如果已经设置了target="_blank",让浏览器正常处理跳转 + if (target === '_blank') { + return; + } + + // 检查是否是有效的页面内ID选择器(以#开头且不是URL) + if (href && href.startsWith('#') && href.length > 1 && !href.includes('://')) { + const targetElement = document.querySelector(href); if (targetElement) { // 只在找到目标元素时阻止默认行为 e.preventDefault(); @@ -373,7 +397,7 @@ document.querySelectorAll('a[href^="#"]').forEach(anchor => { }); } // 如果找不到目标元素,不阻止默认行为 - } else if (targetId === '#') { + } else if (href === '#') { // 处理 href="#" 的情况,滚动到页面顶部 e.preventDefault(); window.scrollTo({ @@ -381,7 +405,11 @@ document.querySelectorAll('a[href^="#"]').forEach(anchor => { behavior: 'smooth' }); } - // 对于URL链接等其他情况,不调用e.preventDefault(),允许浏览器正常跳转 + // 对于URL链接等其他情况,如果没有设置target="_blank",添加它 + else if (href && !href.startsWith('#') && (href.includes('://') || href.startsWith('//'))) { + // 不阻止默认行为,让浏览器处理带target="_blank"的跳转 + this.target = '_blank'; + } }); });