@@ -123,6 +123,7 @@ class TextInputFocusable extends React.Component {
123
123
this . dragNDropListener = this . dragNDropListener . bind ( this ) ;
124
124
this . handlePaste = this . handlePaste . bind ( this ) ;
125
125
this . handlePastedHTML = this . handlePastedHTML . bind ( this ) ;
126
+ this . handleWheel = this . handleWheel . bind ( this ) ;
126
127
}
127
128
128
129
componentDidMount ( ) {
@@ -146,6 +147,7 @@ class TextInputFocusable extends React.Component {
146
147
document . addEventListener ( 'dragleave' , this . dragNDropListener ) ;
147
148
document . addEventListener ( 'drop' , this . dragNDropListener ) ;
148
149
this . textInput . addEventListener ( 'paste' , this . handlePaste ) ;
150
+ this . textInput . addEventListener ( 'wheel' , this . handleWheel ) ;
149
151
}
150
152
}
151
153
@@ -173,6 +175,7 @@ class TextInputFocusable extends React.Component {
173
175
document . removeEventListener ( 'dragleave' , this . dragNDropListener ) ;
174
176
document . removeEventListener ( 'drop' , this . dragNDropListener ) ;
175
177
this . textInput . removeEventListener ( 'paste' , this . handlePaste ) ;
178
+ this . textInput . removeEventListener ( 'wheel' , this . handleWheel ) ;
176
179
}
177
180
}
178
181
@@ -322,6 +325,18 @@ class TextInputFocusable extends React.Component {
322
325
}
323
326
}
324
327
328
+ /**
329
+ * Manually scrolls the text input, then prevents the event from being passed up to the parent.
330
+ * @param {Object } event native Event
331
+ */
332
+ handleWheel ( event ) {
333
+ if ( event . target === document . activeElement ) {
334
+ this . textInput . scrollTop += event . deltaY ;
335
+ event . preventDefault ( ) ;
336
+ event . stopPropagation ( ) ;
337
+ }
338
+ }
339
+
325
340
/**
326
341
* Check the current scrollHeight of the textarea (minus any padding) and
327
342
* divide by line height to get the total number of rows for the textarea.
0 commit comments