refactor: take velocity into account for mobile popover gesture [skip e2e]
This commit is contained in:
@@ -72,6 +72,7 @@ const MobilePopoverContent = ({
|
|||||||
|
|
||||||
let elementY = 0
|
let elementY = 0
|
||||||
let startY = 0
|
let startY = 0
|
||||||
|
let startTimestamp = Date.now()
|
||||||
let closestScrollContainerScrollTop = 0
|
let closestScrollContainerScrollTop = 0
|
||||||
let isClosestScrollContainerScrolledAtStart = false
|
let isClosestScrollContainerScrolledAtStart = false
|
||||||
let containerScrollChangedAfterTouchStart = false
|
let containerScrollChangedAfterTouchStart = false
|
||||||
@@ -79,6 +80,7 @@ const MobilePopoverContent = ({
|
|||||||
const touchStartHandler = (e: TouchEvent) => {
|
const touchStartHandler = (e: TouchEvent) => {
|
||||||
startY = e.touches[0].clientY
|
startY = e.touches[0].clientY
|
||||||
elementY = element.getBoundingClientRect().y
|
elementY = element.getBoundingClientRect().y
|
||||||
|
startTimestamp = Date.now()
|
||||||
closestScrollContainerScrollTop = closestScrollContainer?.scrollTop || 0
|
closestScrollContainerScrollTop = closestScrollContainer?.scrollTop || 0
|
||||||
isClosestScrollContainerScrolledAtStart = !!closestScrollContainer && closestScrollContainerScrollTop > 0
|
isClosestScrollContainerScrolledAtStart = !!closestScrollContainer && closestScrollContainerScrollTop > 0
|
||||||
containerScrollChangedAfterTouchStart = false
|
containerScrollChangedAfterTouchStart = false
|
||||||
@@ -117,11 +119,17 @@ const MobilePopoverContent = ({
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
const touchEndHandler = () => {
|
const touchEndHandler = (event: TouchEvent) => {
|
||||||
const y = element.getBoundingClientRect().y
|
const y = element.getBoundingClientRect().y
|
||||||
const threshold = window.innerHeight * 0.75
|
const threshold = window.innerHeight * 0.75
|
||||||
|
|
||||||
if (y > threshold && !isClosestScrollContainerScrolledAtStart) {
|
const endTimestamp = Date.now()
|
||||||
|
const deltaY = event.changedTouches[0].clientY - startY
|
||||||
|
const velocity = deltaY / (endTimestamp - startTimestamp)
|
||||||
|
|
||||||
|
if (y < threshold && velocity > 2) {
|
||||||
|
requestClose()
|
||||||
|
} else if (y > threshold && !isClosestScrollContainerScrolledAtStart) {
|
||||||
requestClose()
|
requestClose()
|
||||||
} else {
|
} else {
|
||||||
element.animate(
|
element.animate(
|
||||||
|
|||||||
Reference in New Issue
Block a user