@@ -3,6 +3,7 @@ import PropTypes from 'prop-types'
3
3
import shallowequal from 'shallowequal'
4
4
import raf from 'raf'
5
5
import shouldUpdate from './shouldUpdate'
6
+ import supportsPassiveEvents from './supportsPassiveEvents'
6
7
7
8
const noop = ( ) => { }
8
9
@@ -58,6 +59,7 @@ export default class Headroom extends Component {
58
59
this . lastKnownScrollY = 0
59
60
this . scrollTicking = false
60
61
this . resizeTicking = false
62
+ this . eventListenerOptions = false
61
63
this . state = {
62
64
state : 'unfixed' ,
63
65
translateY : 0 ,
@@ -67,11 +69,28 @@ export default class Headroom extends Component {
67
69
68
70
componentDidMount ( ) {
69
71
this . setHeightOffset ( )
72
+
73
+ this . eventListenerOptions = supportsPassiveEvents ( )
74
+ ? { passive : true , capture : false }
75
+ : false
76
+
70
77
if ( ! this . props . disable ) {
71
- this . props . parent ( ) . addEventListener ( 'scroll' , this . handleScroll )
78
+ this . props
79
+ . parent ( )
80
+ . addEventListener (
81
+ 'scroll' ,
82
+ this . handleScroll ,
83
+ this . eventListenerOptions
84
+ )
72
85
73
86
if ( this . props . calcHeightOnResize ) {
74
- this . props . parent ( ) . addEventListener ( 'resize' , this . handleResize )
87
+ this . props
88
+ . parent ( )
89
+ . addEventListener (
90
+ 'resize' ,
91
+ this . handleResize ,
92
+ this . eventListenerOptions
93
+ )
75
94
}
76
95
}
77
96
}
@@ -91,27 +110,67 @@ export default class Headroom extends Component {
91
110
92
111
// Add/remove event listeners when re-enabled/disabled
93
112
if ( ! prevProps . disable && this . props . disable ) {
94
- this . props . parent ( ) . removeEventListener ( 'scroll' , this . handleScroll )
95
- this . props . parent ( ) . removeEventListener ( 'resize' , this . handleResize )
113
+ this . props
114
+ . parent ( )
115
+ . removeEventListener (
116
+ 'scroll' ,
117
+ this . handleScroll ,
118
+ this . eventListenerOptions
119
+ )
120
+ this . props
121
+ . parent ( )
122
+ . removeEventListener (
123
+ 'resize' ,
124
+ this . handleResize ,
125
+ this . eventListenerOptions
126
+ )
96
127
97
128
if ( prevState . state !== 'unfixed' && this . state . state === 'unfixed' ) {
98
129
this . props . onUnfix ( )
99
130
}
100
131
} else if ( prevProps . disable && ! this . props . disable ) {
101
- this . props . parent ( ) . addEventListener ( 'scroll' , this . handleScroll )
132
+ this . props
133
+ . parent ( )
134
+ . addEventListener (
135
+ 'scroll' ,
136
+ this . handleScroll ,
137
+ this . eventListenerOptions
138
+ )
102
139
103
140
if ( this . props . calcHeightOnResize ) {
104
- this . props . parent ( ) . addEventListener ( 'resize' , this . handleResize )
141
+ this . props
142
+ . parent ( )
143
+ . addEventListener (
144
+ 'resize' ,
145
+ this . handleResize ,
146
+ this . eventListenerOptions
147
+ )
105
148
}
106
149
}
107
150
}
108
151
109
152
componentWillUnmount ( ) {
110
153
if ( this . props . parent ( ) ) {
111
- this . props . parent ( ) . removeEventListener ( 'scroll' , this . handleScroll )
112
- this . props . parent ( ) . removeEventListener ( 'resize' , this . handleResize )
154
+ this . props
155
+ . parent ( )
156
+ . removeEventListener (
157
+ 'scroll' ,
158
+ this . handleScroll ,
159
+ this . eventListenerOptions
160
+ )
161
+ this . props
162
+ . parent ( )
163
+ . removeEventListener (
164
+ 'resize' ,
165
+ this . handleResize ,
166
+ this . eventListenerOptions
167
+ )
113
168
}
114
- window . removeEventListener ( 'scroll' , this . handleScroll )
169
+ window . removeEventListener (
170
+ 'scroll' ,
171
+ this . handleScroll ,
172
+ this . eventListenerOptions
173
+ )
115
174
}
116
175
117
176
setRef = ref => ( this . inner = ref )
0 commit comments