diff --git a/src/components/Carousel/Carousel.ts b/src/components/Carousel/Carousel.ts index c896e667..a1d4bb74 100644 --- a/src/components/Carousel/Carousel.ts +++ b/src/components/Carousel/Carousel.ts @@ -702,13 +702,17 @@ export const Carousel = defineComponent({ let accumulatedSize = 0 let index = 0 - clonedSlidesCount.value.before const offset = Math.abs(scrolledOffset.value + clonedSlidesOffset.value) + let iterations = 0 + const maxIterations = slides.length * 2 - while (accumulatedSize <= offset) { + while (accumulatedSize <= offset && iterations < maxIterations) { const normalizedIndex = ((index % slides.length) + slides.length) % slides.length - accumulatedSize += - slidesRect.value[normalizedIndex]?.[dimension.value] + config.gap + const slideSize = slidesRect.value[normalizedIndex]?.[dimension.value] || 0 + if (slideSize <= 0) break + accumulatedSize += slideSize + config.gap index++ + iterations++ } minIndex = index - 1 } @@ -717,6 +721,9 @@ export const Carousel = defineComponent({ { let index = minIndex let accumulatedSize = 0 + let iterations = 0 + const maxIterations = slides.length * 2 + if (index < 0) { accumulatedSize = slidesRect.value @@ -731,12 +738,14 @@ export const Carousel = defineComponent({ Math.abs(scrolledOffset.value) } - while (accumulatedSize < viewportRect.value[dimension.value]) { + while (accumulatedSize < viewportRect.value[dimension.value] && iterations < maxIterations) { const normalizedIndex = ((index % slides.length) + slides.length) % slides.length - accumulatedSize += - slidesRect.value[normalizedIndex]?.[dimension.value] + config.gap + const slideSize = slidesRect.value[normalizedIndex]?.[dimension.value] || 0 + if (slideSize <= 0) break + accumulatedSize += slideSize + config.gap index++ + iterations++ } maxIndex = index - 1 } diff --git a/src/composables/useDrag.ts b/src/composables/useDrag.ts index 23ebcb7d..cdc85805 100644 --- a/src/composables/useDrag.ts +++ b/src/composables/useDrag.ts @@ -54,7 +54,7 @@ export function useDrag(options: UseDragOptions) { const moveEvent = isTouch ? 'touchmove' : 'mousemove' const endEvent = isTouch ? 'touchend' : 'mouseup' - document.addEventListener(moveEvent, handleDrag, { passive: false }) + document.addEventListener(moveEvent, handleDrag, { passive: isTouch }) document.addEventListener(endEvent, handleDragEnd, { passive: true }) options.onDragStart?.() diff --git a/src/utils/calculateAverage.ts b/src/utils/calculateAverage.ts index 066cbfb5..045e71f7 100644 --- a/src/utils/calculateAverage.ts +++ b/src/utils/calculateAverage.ts @@ -1,5 +1,7 @@ export function calculateAverage(numbers: number[]) { if (numbers.length === 0) return 0 - const sum = numbers.reduce((acc, num) => acc + num, 0) - return sum / numbers.length + const validNumbers = numbers.filter(num => typeof num === 'number' && !isNaN(num) && isFinite(num)) + if (validNumbers.length === 0) return 0 + const sum = validNumbers.reduce((acc, num) => acc + num, 0) + return sum / validNumbers.length }