diff --git a/webapp/app.js b/webapp/app.js index 24ad526..46df0a0 100644 --- a/webapp/app.js +++ b/webapp/app.js @@ -536,6 +536,37 @@ loadMonth(); }); + (function bindSwipeMonth() { + var swipeEl = document.getElementById("calendarSticky"); + if (!swipeEl) return; + var startX = 0; + var startY = 0; + var SWIPE_THRESHOLD = 50; + swipeEl.addEventListener("touchstart", function (e) { + if (e.changedTouches.length === 0) return; + var t = e.changedTouches[0]; + startX = t.clientX; + startY = t.clientY; + }, { passive: true }); + swipeEl.addEventListener("touchend", function (e) { + if (e.changedTouches.length === 0) return; + if (!accessDeniedEl.hidden) return; + if (prevBtn.disabled) return; + var t = e.changedTouches[0]; + var deltaX = t.clientX - startX; + var deltaY = t.clientY - startY; + if (Math.abs(deltaX) <= SWIPE_THRESHOLD) return; + if (Math.abs(deltaY) > Math.abs(deltaX)) return; + if (deltaX > SWIPE_THRESHOLD) { + current.setMonth(current.getMonth() - 1); + loadMonth(); + } else if (deltaX < -SWIPE_THRESHOLD) { + current.setMonth(current.getMonth() + 1); + loadMonth(); + } + }, { passive: true }); + })(); + function bindStickyScrollShadow() { var stickyEl = document.getElementById("calendarSticky"); if (!stickyEl || document._stickyScrollBound) return; diff --git a/webapp/style.css b/webapp/style.css index c1027a6..ba2c492 100644 --- a/webapp/style.css +++ b/webapp/style.css @@ -80,6 +80,7 @@ body { background: var(--bg); padding-bottom: 12px; margin-bottom: 4px; + touch-action: pan-y; } .calendar-sticky.is-scrolled {