chrome is the shittiest browser ever made, fuck this!

This commit is contained in:
2026-07-12 20:13:01 +02:00
parent 4b0abfb551
commit 6c926a2374

View File

@@ -3068,12 +3068,18 @@ window.cancelAnimFrame = (function () {
let tt = false; let tt = false;
const stimeout = 500; const stimeout = 500;
// Navbar scroll effect - make background black when scrolling // Navbar scroll effect - throttled with rAF to avoid style recalc on every scroll tick
if (navbar) { if (navbar) {
let _navScrollRafPending = false;
window.addEventListener('scroll', () => { window.addEventListener('scroll', () => {
const isScrolled = window.scrollY > 10; if (_navScrollRafPending) return;
navbar.classList.toggle('scrolled', isScrolled); _navScrollRafPending = true;
}); requestAnimationFrame(() => {
_navScrollRafPending = false;
const isScrolled = window.scrollY > 10;
navbar.classList.toggle('scrolled', isScrolled);
});
}, { passive: true });
} }
// Helper to immediately abort media downloads // Helper to immediately abort media downloads
@@ -4799,41 +4805,51 @@ window.cancelAnimFrame = (function () {
}; };
// Scroll detection - preload before reaching bottom // Scroll detection - preload before reaching bottom
// Throttled with rAF: getBoundingClientRect() and offsetHeight reads trigger forced layout
// reflows. Without throttling, Chromium freezes on every scroll tick (desktop-specific
// because desktop Chromium doesn't async-scroll the way mobile Chrome does).
const PRELOAD_OFFSET = 500; // pixels before bottom to trigger load const PRELOAD_OFFSET = 500; // pixels before bottom to trigger load
let _scrollRafPending = false;
const onScroll = () => { const onScroll = () => {
const currentContainer = postsContainer; if (_scrollRafPending) return; // already have a frame queued, skip
// Only run if THIS container is the active one and still in DOM _scrollRafPending = true;
if (!currentContainer || !document.body.contains(currentContainer)) {
window.removeEventListener('scroll', onScroll);
return;
}
if (currentContainer.classList.contains('no-infinite-scroll')) return;
if (!document.querySelector('#main')) return;
updateUrlAndPagination(); requestAnimationFrame(() => {
_scrollRafPending = false;
const scrollPosition = window.innerHeight + window.scrollY; const currentContainer = postsContainer;
const pageHeight = document.querySelector('#main').offsetHeight; // Only run if THIS container is the active one and still in DOM
const distanceFromBottom = pageHeight - scrollPosition; if (!currentContainer || !document.body.contains(currentContainer)) {
window.removeEventListener('scroll', onScroll);
return;
}
if (currentContainer.classList.contains('no-infinite-scroll')) return;
if (!document.querySelector('#main')) return;
// Load more when within PRELOAD_OFFSET pixels of bottom updateUrlAndPagination();
if (distanceFromBottom < PRELOAD_OFFSET && infiniteState.hasMore && !infiniteState.loading) {
loadMoreItems();
}
// Load previous when within PRELOAD_OFFSET pixels of top const scrollPosition = window.innerHeight + window.scrollY;
// Also ensure we aren't already at page 1 const pageHeight = document.querySelector('#main').offsetHeight;
if (window.scrollY < PRELOAD_OFFSET && infiniteState.hasPrev && !infiniteState.loadingUp) { const distanceFromBottom = pageHeight - scrollPosition;
loadPreviousItems();
}
infiniteState.lastScrollY = window.scrollY; // Load more when within PRELOAD_OFFSET pixels of bottom
if (distanceFromBottom < PRELOAD_OFFSET && infiniteState.hasMore && !infiniteState.loading) {
loadMoreItems();
}
// Load previous when within PRELOAD_OFFSET pixels of top
if (window.scrollY < PRELOAD_OFFSET && infiniteState.hasPrev && !infiniteState.loadingUp) {
loadPreviousItems();
}
infiniteState.lastScrollY = window.scrollY;
});
}; };
// Store scroll handler reference for cleanup // Store scroll handler reference for cleanup
postsContainer._scrollHandler = onScroll; postsContainer._scrollHandler = onScroll;
window.addEventListener("scroll", onScroll); window.addEventListener('scroll', onScroll, { passive: true });
// Initial check (in case we loaded at top/bottom) // Initial check (in case we loaded at top/bottom)
setTimeout(onScroll, 100); setTimeout(onScroll, 100);