From b1fc8e24d71ecfacb7beede6ffe3ccaab342401b Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Mon, 24 Aug 2026 20:54:50 +0000 Subject: [PATCH] Eyes banner follows taps not just mouse. --- frontend/src/assets/pagerite.css | 4 ++-- pagerite/themes/eyes/banner.html | 23 +++++++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/frontend/src/assets/pagerite.css b/frontend/src/assets/pagerite.css index 3b5a23d..f4ea91f 100644 --- a/frontend/src/assets/pagerite.css +++ b/frontend/src/assets/pagerite.css @@ -946,7 +946,7 @@ article h2 { /* Smaller type: the horizontal link strip fits roughly a third more items per line. The nested-list gaps below are em-based and shrink along. */ - font-size: 0.9rem; + font-size: 0.8rem; } /* Only the main level becomes a horizontal wrapping strip; submenus stay @@ -954,7 +954,7 @@ article h2 { #sidebar > ul { flex-direction: row; flex-wrap: wrap; - gap: 0.35rem 0.9rem; + gap: 0.3rem 0.75rem; } figure:has(.right), diff --git a/pagerite/themes/eyes/banner.html b/pagerite/themes/eyes/banner.html index 0c61eb8..f5dc0c2 100644 --- a/pagerite/themes/eyes/banner.html +++ b/pagerite/themes/eyes/banner.html @@ -27,15 +27,30 @@ let my = 0 let lastMove = 0 - addEventListener('mousemove', e => { + // Mouse and touch tracked with separate listeners (pointer events arrive + // too late on some mobile browsers). Passive listeners: a drag on the + // banner still scrolls the page — on browsers that stop delivering + // touchmove once scrolling takes over, the gaze just follows until then. + const track = (x, y) => { const r = c.getBoundingClientRect() // Convert viewport coordinates into the canvas' CSS-pixel coordinate // system. This remains correct with browser zoom, CSS transforms, etc. - mx = (e.clientX - r.left) * c.clientWidth / r.width - my = (e.clientY - r.top) * c.clientHeight / r.height + mx = (x - r.left) * c.clientWidth / r.width + my = (y - r.top) * c.clientHeight / r.height lastMove = performance.now() - }) + } + + addEventListener('mousemove', e => track(e.clientX, e.clientY)) + + const trackTouch = e => { + const t = e.touches[0] + + if (t) track(t.clientX, t.clientY) + } + + addEventListener('touchstart', trackTouch, { passive: true }) + addEventListener('touchmove', trackTouch, { passive: true }) let gx = 0.5 let gy = 0.5