lyh-917's picture
Upload 18 files
9a8061f verified
// 加载页面控制函数
function initLoadingScreen() {
const loadingScreen = document.querySelector('.loading-screen');
const progressBar = document.querySelector('.progress-bar');
const progressText = document.querySelector('.progress-text .digital-glitch');
const loadingMessage = document.querySelector('.loading-message');
if (!loadingScreen || !progressBar || !progressText) return;
// 检查是否是从站内导航回来的
const referrer = document.referrer;
const currentHost = window.location.host;
// 如果是从同一站点的其他页面返回的,不显示加载动画
if (referrer && referrer.includes(currentHost) && !isPageReload()) {
loadingScreen.classList.add('hidden');
loadingScreen.style.display = 'none';
return;
}
const messages = [
"Initializing system components...",
"Connecting to neural network...",
"Loading AI modules...",
"Calibrating response patterns...",
"Starting quantum processors..."
];
let progress = 0;
const totalDuration = 5000; // 5秒钟完成加载
const interval = 30; // 每30ms更新一次
const steps = totalDuration / interval;
const increment = 100 / steps;
// 随机更新消息
let messageIndex = 0;
const updateProgress = () => {
progress += increment;
// 添加一些随机性,模拟真实加载
const randomFactor = Math.random() * 0.5;
const adjustedProgress = Math.min(progress + randomFactor, 100);
// 更新进度条宽度
progressBar.style.width = `${adjustedProgress}%`;
// 更新进度文本
const displayProgress = Math.floor(adjustedProgress);
progressText.textContent = `${displayProgress}%`;
// 不同阶段显示不同消息
if (displayProgress > messageIndex * 25 && messageIndex < messages.length) {
loadingMessage.textContent = messages[messageIndex];
messageIndex++;
// 添加闪烁效果
loadingScreen.style.filter = 'brightness(1.2)';
setTimeout(() => {
loadingScreen.style.filter = 'brightness(1)';
}, 100);
}
// 模拟网络加载的变化
if (displayProgress >= 99.5) {
// 加载完成,隐藏加载屏幕
setTimeout(() => {
loadingScreen.classList.add('hidden');
// 完全隐藏后从DOM中移除
setTimeout(() => {
loadingScreen.style.display = 'none';
}, 500);
}, 200);
return;
}
// 添加随机故障效果
if (Math.random() < 0.1) {
createGlitchEffect();
}
requestAnimationFrame(updateProgress);
};
// 创建故障效果
const createGlitchEffect = () => {
// 屏幕抖动
loadingScreen.style.transform = `translate(${(Math.random() - 0.5) * 10}px, ${(Math.random() - 0.5) * 5}px)`;
// 随机调整颜色和不透明度
loadingScreen.style.filter = `hue-rotate(${Math.random() * 30}deg) brightness(${1 + Math.random() * 0.3})`;
// 恢复正常
setTimeout(() => {
loadingScreen.style.transform = 'translate(0, 0)';
loadingScreen.style.filter = 'none';
}, 100);
};
// 开始更新进度
setTimeout(() => {
updateProgress();
}, 300);
}
// 动态产生随机粒子
function createRandomParticle() {
const container = document.querySelector('.particle-container');
if (!container) return;
setInterval(() => {
const particle = document.createElement('div');
particle.className = 'particle';
// 随机位置
particle.style.left = `${Math.random() * 100}%`;
particle.style.top = '100%';
// 随机大小
const size = Math.random() * 2 + 1;
particle.style.width = `${size}px`;
particle.style.height = `${size}px`;
// 获取CSS变量
const styles = getComputedStyle(document.documentElement);
const colorOptions = [
styles.getPropertyValue('--accent-green').trim(),
styles.getPropertyValue('--accent-color-5').trim(),
styles.getPropertyValue('--accent-blue').trim(),
styles.getPropertyValue('--accent-color-1').trim()
];
// 随机颜色
const randomColor = colorOptions[Math.floor(Math.random() * colorOptions.length)];
particle.style.backgroundColor = randomColor;
particle.style.boxShadow = `0 0 5px ${randomColor}`;
// 随机透明度
particle.style.opacity = (Math.random() * 0.5 + 0.3).toString();
// 添加到容器
container.appendChild(particle);
// 设置动画结束后移除元素
setTimeout(() => {
particle.remove();
}, 5000);
}, 600); // 每600ms创建一个新粒子
}
// 添加主题选项动画效果
function animateThemeOptions() {
const themeOptions = document.querySelectorAll('.theme-option');
themeOptions.forEach((option, index) => {
// 直接显示元素,不使用动画过渡
option.style.opacity = '1';
});
}
// 页面加载完成后初始化效果
document.addEventListener('DOMContentLoaded', function() {
// 初始化加载页面
initLoadingScreen();
// 初始化粒子效果
createRandomParticle();
// 初始化主题选项动画
animateThemeOptions();
});
// 仅用于开发环境 - 清除会话状态
function resetVisitState() {
// 清除会话状态相关变量
sessionStorage.clear();
console.log('Visit state has been reset. This will simulate a first-time visit on the next navigation.');
}
// 注释掉下面这行代码来禁用自动重置(仅开发环境使用)
// resetVisitState();
// 判断页面是否为刷新
function isPageReload() {
// 如果页面表现性能数据可用,检查导航类型
if (window.performance && window.performance.navigation) {
return window.performance.navigation.type === 1; // 1表示页面刷新
}
// 对较新的浏览器使用Navigation Timing API
if (window.performance && window.performance.getEntriesByType && window.performance.getEntriesByType('navigation').length) {
return window.performance.getEntriesByType('navigation')[0].type === 'reload';
}
// 无法确定时,假设不是刷新
return false;
}