diff --git a/src/components/polymech/GalleryK.astro b/src/components/polymech/GalleryK.astro index 2e13fb5..ef29766 100644 --- a/src/components/polymech/GalleryK.astro +++ b/src/components/polymech/GalleryK.astro @@ -67,12 +67,19 @@ const alt_translated = await pMap(images, async (image) => { lightboxLoaded: false, touchStartX: 0, touchEndX: 0, + mouseStartX: 0, + mouseEndX: 0, + mouseIsDown: false, minSwipeDistance: 50, isSwiping: false, images: ${JSON.stringify(images)}, - handleSwipe() { - if (!this.isSwiping) return; - const swipeDistance = this.touchEndX - this.touchStartX; + handleSwipe(isMouseEvent = false) { + if (!this.isSwiping && !this.mouseIsDown) return; + + const startX = isMouseEvent ? this.mouseStartX : this.touchStartX; + const endX = isMouseEvent ? this.mouseEndX : this.touchEndX; + const swipeDistance = endX - startX; + if (Math.abs(swipeDistance) >= this.minSwipeDistance) { if (swipeDistance > 0 && this.currentIndex > 0) { // Swiped right, show previous image @@ -82,11 +89,13 @@ const alt_translated = await pMap(images, async (image) => { this.currentIndex++; } } + this.isSwiping = false; + this.mouseIsDown = false; }, preloadAndOpen(index = null) { // If we're in the middle of a swipe gesture, don't open the lightbox - if (this.isSwiping) return; + if (this.isSwiping || this.mouseIsDown) return; // If an index is provided, update the current index if (index !== null) { @@ -123,6 +132,10 @@ const alt_translated = await pMap(images, async (image) => { @touchstart="touchStartX = $event.touches[0].clientX; isSwiping = true;" @touchend="touchEndX = $event.changedTouches[0].clientX; handleSwipe();" @touchcancel="isSwiping = false;" + @mousedown="mouseStartX = $event.clientX; mouseIsDown = true; $event.preventDefault();" + @mousemove="if(mouseIsDown) { mouseEndX = $event.clientX; }" + @mouseup="if(mouseIsDown) { mouseEndX = $event.clientX; handleSwipe(true); }" + @mouseleave="mouseIsDown = false;" > {images.map((image, index) => (
@@ -193,6 +206,10 @@ const alt_translated = await pMap(images, async (image) => { @touchstart="touchStartX = $event.touches[0].clientX; isSwiping = true;" @touchend="touchEndX = $event.changedTouches[0].clientX; handleSwipe();" @touchcancel="isSwiping = false;" + @mousedown="mouseStartX = $event.clientX; mouseIsDown = true; $event.preventDefault();" + @mousemove="if(mouseIsDown) { mouseEndX = $event.clientX; }" + @mouseup="if(mouseIsDown) { mouseEndX = $event.clientX; handleSwipe(true); }" + @mouseleave="mouseIsDown = false;" > {images.map((image, index) => (