From 330dcd07f19da8874fcfa4f5c6becd7a2c333e50 Mon Sep 17 00:00:00 2001 From: Curt Grimes Date: Sat, 6 Aug 2022 03:42:38 -0500 Subject: [PATCH 1/2] docs(onKeyStroke): allow typing into search on demo page (#2050) --- packages/core/onKeyStroke/demo.vue | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/core/onKeyStroke/demo.vue b/packages/core/onKeyStroke/demo.vue index c3b0c0b22b4..88e1d1d9b01 100644 --- a/packages/core/onKeyStroke/demo.vue +++ b/packages/core/onKeyStroke/demo.vue @@ -7,22 +7,18 @@ const translateY = ref(0) onKeyStroke(['w', 'W', 'ArrowUp'], (e: KeyboardEvent) => { translateY.value -= 10 - e.preventDefault() }) onKeyStroke(['s', 'S', 'ArrowDown'], (e: KeyboardEvent) => { translateY.value += 10 - e.preventDefault() }) onKeyStroke(['a', 'A', 'ArrowLeft'], (e: KeyboardEvent) => { translateX.value -= 10 - e.preventDefault() }) onKeyStroke(['d', 'D', 'ArrowRight'], (e: KeyboardEvent) => { translateX.value += 10 - e.preventDefault() }) From 53a209e1118687c0f0b7c876377fa4126afce624 Mon Sep 17 00:00:00 2001 From: Curt Grimes Date: Sat, 6 Aug 2022 11:58:48 -0500 Subject: [PATCH 2/2] fix(useScroll): account for rounding errors when calculating arrivedState (#2051) --- packages/core/useScroll/index.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/core/useScroll/index.ts b/packages/core/useScroll/index.ts index c80d8328549..43aee8010fe 100644 --- a/packages/core/useScroll/index.ts +++ b/packages/core/useScroll/index.ts @@ -50,6 +50,14 @@ export interface UseScrollOptions { eventListenerOptions?: boolean | AddEventListenerOptions } +/** + * We have to check if the scroll amount is close enough to some threshold in order to + * more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded + * numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded. + * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled + */ +const ARRIVED_STATE_THRESHOLD_PIXELS = 1 + /** * Reactive scroll. * @@ -114,7 +122,7 @@ export function useScroll( directions.right = scrollLeft > x.value arrivedState.left = scrollLeft <= 0 + (offset.left || 0) arrivedState.right - = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) + = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS x.value = scrollLeft let scrollTop = eventTarget.scrollTop @@ -127,7 +135,7 @@ export function useScroll( directions.bottom = scrollTop > y.value arrivedState.top = scrollTop <= 0 + (offset.top || 0) arrivedState.bottom - = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) + = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS y.value = scrollTop isScrolling.value = true