56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
/* 酷冰甲降温服 · 前台交互 */
|
|
(function () {
|
|
'use strict';
|
|
|
|
// 明暗切换
|
|
var root = document.documentElement;
|
|
var toggle = document.getElementById('themeToggle');
|
|
if (toggle) {
|
|
toggle.addEventListener('click', function () {
|
|
var cur = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
|
|
root.setAttribute('data-theme', cur);
|
|
try { localStorage.setItem('site_theme', cur); } catch (e) {}
|
|
});
|
|
}
|
|
|
|
// 滚动时 header 阴影
|
|
var header = document.getElementById('siteHeader');
|
|
function onScroll() {
|
|
if (header) header.classList.toggle('scrolled', window.scrollY > 10);
|
|
}
|
|
window.addEventListener('scroll', onScroll, { passive: true });
|
|
onScroll();
|
|
|
|
// 移动端菜单
|
|
var burger = document.getElementById('navBurger');
|
|
var links = document.getElementById('navLinks');
|
|
if (burger && links) {
|
|
burger.addEventListener('click', function () { links.classList.toggle('open'); });
|
|
links.addEventListener('click', function (e) {
|
|
if (e.target.tagName === 'A') links.classList.remove('open');
|
|
});
|
|
}
|
|
|
|
// 滚动揭示
|
|
var io = new IntersectionObserver(function (entries) {
|
|
entries.forEach(function (en) {
|
|
if (en.isIntersecting) { en.target.classList.add('in'); io.unobserve(en.target); }
|
|
});
|
|
}, { threshold: 0.12 });
|
|
document.querySelectorAll('.reveal').forEach(function (el, i) {
|
|
el.style.transitionDelay = (i % 6) * 60 + 'ms';
|
|
io.observe(el);
|
|
});
|
|
|
|
// 磁性按钮
|
|
document.querySelectorAll('.magnetic').forEach(function (el) {
|
|
el.addEventListener('mousemove', function (e) {
|
|
var r = el.getBoundingClientRect();
|
|
var x = e.clientX - r.left - r.width / 2;
|
|
var y = e.clientY - r.top - r.height / 2;
|
|
el.style.transform = 'translate(' + x * 0.18 + 'px,' + y * 0.28 + 'px)';
|
|
});
|
|
el.addEventListener('mouseleave', function () { el.style.transform = ''; });
|
|
});
|
|
})();
|