diff --git a/frontend/src/lib/components/borne/items.svelte b/frontend/src/lib/components/borne/items.svelte index dc05407..44f7d6d 100644 --- a/frontend/src/lib/components/borne/items.svelte +++ b/frontend/src/lib/components/borne/items.svelte @@ -6,6 +6,60 @@ import { onMount } from 'svelte'; import { fade, fly } from 'svelte/transition'; + let itemsContainer: HTMLElement; + + let touchStartX = 0; + let touchEndX = 0; + let isTouch = false; + + function handleTouchStart(e: TouchEvent) { + touchStartX = e.changedTouches[0].screenX; + isTouch = true; + } + + function handleTouchEnd(e: TouchEvent) { + if (isTouch) { + touchEndX = e.changedTouches[0].screenX; + handleSwipe(); + isTouch = false; + } + } + + function handleMouseDown(e: MouseEvent) { + touchStartX = e.screenX; + } + + function handleMouseUp(e: MouseEvent) { + touchEndX = e.screenX; + handleMouseSwipe(); + } + + function handleSwipe() { + const swipeThreshold = 50; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + + function handleMouseSwipe() { + const swipeThreshold = 100; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + export let state: ItemState = 'buyable'; export let category: string = ''; @@ -31,8 +85,8 @@ let items: Item[] = []; - let page: number = 0; - let maxPage: number = 0; + let page: number = 1; + let maxPage: number = 1; let nextPage = () => { if (page < maxPage) { page++; @@ -40,7 +94,7 @@ } }; let prevPage = () => { - if (page > 0) { + if (page > 1) { page--; reloadItems(); } @@ -132,87 +186,99 @@ {/if} - -{#if items.length === 0} -