Skip to content

Commit fddbc19

Browse files
authored
fix: detect browser support for passive events (#2325)
1 parent 9be5fa3 commit fddbc19

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

src/plugin-hooks/useResizeColumns.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ensurePluginOrder,
77
} from '../publicUtils'
88

9-
import { getFirstDefined } from '../utils'
9+
import { getFirstDefined, passiveEventSupported } from '../utils'
1010

1111
// Default Column
1212
defaultColumn.canResize = true
@@ -95,12 +95,19 @@ const defaultGetResizerProps = (props, { instance, header }) => {
9595
const events = isTouchEvent
9696
? handlersAndEvents.touch
9797
: handlersAndEvents.mouse
98-
document.addEventListener(events.moveEvent, events.moveHandler, {
99-
passive: false,
100-
})
101-
document.addEventListener(events.upEvent, events.upHandler, {
102-
passive: false,
103-
})
98+
const passiveIfSupported = passiveEventSupported()
99+
? { passive: false }
100+
: false
101+
document.addEventListener(
102+
events.moveEvent,
103+
events.moveHandler,
104+
passiveIfSupported
105+
)
106+
document.addEventListener(
107+
events.upEvent,
108+
events.upHandler,
109+
passiveIfSupported
110+
)
104111

105112
dispatch({
106113
type: actions.columnStartResizing,

src/utils.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,29 @@ export function unpreparedAccessWarning() {
280280
)
281281
}
282282

283+
let passiveSupported = null
284+
export function passiveEventSupported() {
285+
// memoize support to avoid adding multiple test events
286+
if (typeof passiveSupported === 'boolean') return passiveSupported
287+
288+
let supported = false
289+
try {
290+
const options = {
291+
get passive() {
292+
supported = true
293+
return false
294+
},
295+
}
296+
297+
window.addEventListener('test', null, options)
298+
window.removeEventListener('test', null, options)
299+
} catch (err) {
300+
supported = false
301+
}
302+
passiveSupported = supported
303+
return passiveSupported
304+
}
305+
283306
//
284307

285308
const reOpenBracket = /\[/g

0 commit comments

Comments
 (0)