Ремонт квартиры: сайт remont.digital-home.site из заметок + авто-деплой
All checks were successful
Deploy Remont Site / deploy (push) Successful in 57s
All checks were successful
Deploy Remont Site / deploy (push) Successful in 57s
- переименованы заметки (Планировка, Гостиная-кухня, Спальня) и картинки - вычищены таблицы, добавлен README-индекс - .site/: генератор сайта из markdown (node+sharp → nginx), дизайн из assets - .gitea/workflows/deploy-remont.yml: авто-сборка и деплой по пушу в папку Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
79
Ремонт квартира/.site/assets/app.js
Normal file
79
Ремонт квартира/.site/assets/app.js
Normal file
@@ -0,0 +1,79 @@
|
||||
// ── тема ──────────────────────────────────────────────────
|
||||
(function () {
|
||||
const root = document.documentElement;
|
||||
const saved = localStorage.getItem('remont-theme');
|
||||
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
root.setAttribute('data-theme', saved || (prefersDark ? 'dark' : 'light'));
|
||||
|
||||
const btn = document.getElementById('themeBtn');
|
||||
btn.addEventListener('click', () => {
|
||||
const next = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
|
||||
root.setAttribute('data-theme', next);
|
||||
localStorage.setItem('remont-theme', next);
|
||||
document.querySelector('meta[name=theme-color]')
|
||||
.setAttribute('content', next === 'dark' ? '#201F1B' : '#EDE8DE');
|
||||
});
|
||||
})();
|
||||
|
||||
// ── тень шапки при скролле ────────────────────────────────
|
||||
(function () {
|
||||
const bar = document.getElementById('topbar');
|
||||
const onScroll = () => bar.classList.toggle('scrolled', window.scrollY > 8);
|
||||
onScroll();
|
||||
window.addEventListener('scroll', onScroll, { passive: true });
|
||||
})();
|
||||
|
||||
// ── появление секций ──────────────────────────────────────
|
||||
(function () {
|
||||
const io = new IntersectionObserver((entries) => {
|
||||
entries.forEach((e) => {
|
||||
if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); }
|
||||
});
|
||||
}, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' });
|
||||
document.querySelectorAll('.reveal').forEach((el) => io.observe(el));
|
||||
})();
|
||||
|
||||
// ── активный пункт навигации ──────────────────────────────
|
||||
(function () {
|
||||
const links = [...document.querySelectorAll('#nav a')];
|
||||
const map = new Map(links.map((a) => [a.getAttribute('href').slice(1), a]));
|
||||
const io = new IntersectionObserver((entries) => {
|
||||
entries.forEach((e) => {
|
||||
if (e.isIntersecting) {
|
||||
links.forEach((l) => l.classList.remove('active'));
|
||||
map.get(e.target.id)?.classList.add('active');
|
||||
}
|
||||
});
|
||||
}, { rootMargin: '-45% 0px -50% 0px' });
|
||||
['plan', 'living', 'bedroom'].forEach((id) => {
|
||||
const el = document.getElementById(id);
|
||||
if (el) io.observe(el);
|
||||
});
|
||||
})();
|
||||
|
||||
// ── лайтбокс ──────────────────────────────────────────────
|
||||
(function () {
|
||||
const lb = document.getElementById('lightbox');
|
||||
const lbImg = document.getElementById('lbImg');
|
||||
const close = document.getElementById('lbClose');
|
||||
|
||||
function open(src, alt) {
|
||||
lbImg.src = src; lbImg.alt = alt || '';
|
||||
lb.classList.add('open'); lb.setAttribute('aria-hidden', 'false');
|
||||
document.body.style.overflow = 'hidden';
|
||||
}
|
||||
function hide() {
|
||||
lb.classList.remove('open'); lb.setAttribute('aria-hidden', 'true');
|
||||
document.body.style.overflow = '';
|
||||
lbImg.src = '';
|
||||
}
|
||||
|
||||
document.querySelectorAll('[data-zoom]').forEach((img) => {
|
||||
img.style.cursor = 'zoom-in';
|
||||
img.addEventListener('click', (ev) => { ev.stopPropagation(); open(img.src, img.alt); });
|
||||
});
|
||||
|
||||
lb.addEventListener('click', (e) => { if (e.target !== lbImg) hide(); });
|
||||
close.addEventListener('click', hide);
|
||||
document.addEventListener('keydown', (e) => { if (e.key === 'Escape') hide(); });
|
||||
})();
|
||||
Reference in New Issue
Block a user