Skip to content

Commit a01dee4

Browse files
authored
perf(events): use passive event listeners where possible (#2435)
1 parent 9463138 commit a01dee4

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

src/components/collapse/collapse.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ const EVENT_ACCORDION = 'bv::collapse::accordion'
77
// Events we listen to on $root
88
const EVENT_TOGGLE = 'bv::toggle::collapse'
99

10+
// Event Listener options
11+
const EventOptions = { passive: true, capture: false }
12+
1013
// @vue/component
1114
export default {
1215
name: 'BCollapse',
@@ -73,19 +76,19 @@ export default {
7376
mounted () {
7477
if (this.isNav && typeof document !== 'undefined') {
7578
// Set up handlers
76-
eventOn(window, 'resize', this.handleResize, false)
77-
eventOn(window, 'orientationchange', this.handleResize, false)
79+
eventOn(window, 'resize', this.handleResize, EventOptions)
80+
eventOn(window, 'orientationchange', this.handleResize, EventOptions)
7881
this.handleResize()
7982
}
8083
this.emitState()
8184
},
8285
updated () {
8386
this.$root.$emit(EVENT_STATE, this.id, this.show)
8487
},
85-
beforeDestroy () {
88+
beforeDestroy () /* istanbul ignore next */ {
8689
if (this.isNav && typeof document !== 'undefined') {
87-
eventOff(window, 'resize', this.handleResize, false)
88-
eventOff(window, 'orientationchange', this.handleResize, false)
90+
eventOff(window, 'resize', this.handleResize, EventOptions)
91+
eventOff(window, 'orientationchange', this.handleResize, EventOptions)
8992
}
9093
},
9194
methods: {

src/components/modal/modal.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -585,21 +585,25 @@ export default {
585585
},
586586
// Turn on/off focusin listener
587587
setEnforceFocus (on) {
588+
const options = { passive: true, capture: false }
588589
if (on) {
589-
eventOn(document, 'focusin', this.focusHandler, false)
590+
eventOn(document, 'focusin', this.focusHandler, options)
590591
} else {
591-
eventOff(document, 'focusin', this.focusHandler, false)
592+
eventOff(document, 'focusin', this.focusHandler, options)
592593
}
593594
},
594595
// Resize Listener
595-
setResizeEvent (on) {
596-
['resize', 'orientationchange'].forEach(evtName => {
597-
if (on) {
598-
eventOn(window, evtName, this.adjustDialog)
599-
} else {
600-
eventOff(window, evtName, this.adjustDialog)
596+
setResizeEvent (on) /* istanbul ignore next: can't easily test in JSDOM */ {
597+
['resize', 'orientationchange'].forEach(
598+
evtName => {
599+
const options = { passive: true, capture: false }
600+
if (on) {
601+
eventOn(window, evtName, this.adjustDialog, options)
602+
} else {
603+
eventOff(window, evtName, this.adjustDialog, options)
604+
}
601605
}
602-
})
606+
)
603607
},
604608
// Root Listener handlers
605609
showHandler (id, triggerEl) {

0 commit comments

Comments
 (0)