Skip to content

Commit a54e2dd

Browse files
authored
Tidy capturePointer (#3071)
* Fixing nested onClick * Latest * Remove unused var
1 parent f56202f commit a54e2dd

5 files changed

Lines changed: 21 additions & 35 deletions

File tree

dev/react/src/examples/Drag-draggable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { useState, useRef, useEffect } from "react"
21
import { motion } from "framer-motion"
2+
import { useRef, useState } from "react"
33

44
const styleA = {
55
width: 200,

packages/framer-motion/src/gestures/pan/PanSession.ts

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isPrimaryPointer } from "motion-dom"
1+
import { capturePointer, isPrimaryPointer } from "motion-dom"
22
import { millisecondsToSeconds, secondsToMilliseconds } from "motion-utils"
33
import { addPointerEvent } from "../../events/add-pointer-event"
44
import { extractEventInfo } from "../../events/event-info"
@@ -353,19 +353,3 @@ function getVelocity(history: TimestampedPoint[], timeDelta: number): Point {
353353

354354
return currentVelocity
355355
}
356-
357-
function capturePointer(event: PointerEvent, action: "set" | "release") {
358-
const actionName = `${action}PointerCapture` as
359-
| "setPointerCapture"
360-
| "releasePointerCapture"
361-
362-
if (
363-
event.currentTarget instanceof Element &&
364-
actionName in event.currentTarget &&
365-
event.pointerId !== undefined
366-
) {
367-
try {
368-
event.currentTarget[actionName](event.pointerId)
369-
} catch (e) {}
370-
}
371-
}

packages/motion-dom/src/gestures/press/index.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ElementOrSelector } from "../../utils/resolve-elements"
22
import { isDragActive } from "../drag/state/is-active"
33
import { EventOptions } from "../types"
4+
import { capturePointer } from "../utils/capture-pointer"
45
import { isNodeOrChild } from "../utils/is-node-or-child"
56
import { isPrimaryPointer } from "../utils/is-primary-pointer"
67
import { setupGesture } from "../utils/setup"
@@ -51,37 +52,22 @@ export function press(
5152
)
5253

5354
const startPress = (startEvent: PointerEvent) => {
54-
const lockTarget = startEvent.target as Element
5555
const target = startEvent.currentTarget as Element
5656

5757
if (!target || !isValidPressEvent(startEvent) || isPressing.has(target))
5858
return
5959

6060
isPressing.add(target)
6161

62-
if (
63-
lockTarget.setPointerCapture &&
64-
startEvent.pointerId !== undefined
65-
) {
66-
try {
67-
lockTarget.setPointerCapture(startEvent.pointerId)
68-
} catch (e) {}
69-
}
62+
capturePointer(startEvent, "set")
7063

7164
const onPressEnd = onPressStart(target, startEvent)
7265

7366
const onPointerEnd = (endEvent: PointerEvent, success: boolean) => {
7467
target.removeEventListener("pointerup", onPointerUp)
7568
target.removeEventListener("pointercancel", onPointerCancel)
7669

77-
if (
78-
lockTarget.releasePointerCapture &&
79-
endEvent.pointerId !== undefined
80-
) {
81-
try {
82-
lockTarget.releasePointerCapture(endEvent.pointerId)
83-
} catch (e) {}
84-
}
70+
capturePointer(endEvent, "release")
8571

8672
if (!isValidPressEvent(endEvent) || !isPressing.has(target)) {
8773
return
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export function capturePointer(event: PointerEvent, action: "set" | "release") {
2+
const actionName = `${action}PointerCapture` as
3+
| "setPointerCapture"
4+
| "releasePointerCapture"
5+
6+
if (
7+
event.target instanceof Element &&
8+
actionName in event.target &&
9+
event.pointerId !== undefined
10+
) {
11+
try {
12+
event.target[actionName](event.pointerId)
13+
} catch (e) {}
14+
}
15+
}

packages/motion-dom/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export * from "./gestures/hover"
1515
export * from "./gestures/press"
1616
export * from "./gestures/press/types"
1717
export * from "./gestures/types"
18+
export * from "./gestures/utils/capture-pointer"
1819

1920
export * from "./render/svg/types"
2021

0 commit comments

Comments
 (0)