@@ -118,6 +118,7 @@ class TextInputFocusable extends React.Component {
118
118
this . dragNDropListener = this . dragNDropListener . bind ( this ) ;
119
119
this . handlePaste = this . handlePaste . bind ( this ) ;
120
120
this . handlePastedHTML = this . handlePastedHTML . bind ( this ) ;
121
+ this . handleWheel = this . handleWheel . bind ( this ) ;
121
122
}
122
123
123
124
componentDidMount ( ) {
@@ -141,6 +142,7 @@ class TextInputFocusable extends React.Component {
141
142
document . addEventListener ( 'dragleave' , this . dragNDropListener ) ;
142
143
document . addEventListener ( 'drop' , this . dragNDropListener ) ;
143
144
this . textInput . addEventListener ( 'paste' , this . handlePaste ) ;
145
+ this . textInput . addEventListener ( 'wheel' , this . handleWheel ) ;
144
146
}
145
147
}
146
148
@@ -168,6 +170,7 @@ class TextInputFocusable extends React.Component {
168
170
document . removeEventListener ( 'dragleave' , this . dragNDropListener ) ;
169
171
document . removeEventListener ( 'drop' , this . dragNDropListener ) ;
170
172
this . textInput . removeEventListener ( 'paste' , this . handlePaste ) ;
173
+ this . textInput . removeEventListener ( 'wheel' , this . handleWheel ) ;
171
174
}
172
175
}
173
176
@@ -304,6 +307,18 @@ class TextInputFocusable extends React.Component {
304
307
}
305
308
}
306
309
310
+ /**
311
+ * Manually scrolls the text input, then prevents the event from being passed up to the parent.
312
+ * @param {Object } event native Event
313
+ */
314
+ handleWheel ( event ) {
315
+ if ( event . target === document . activeElement ) {
316
+ this . textInput . scrollTop += event . deltaY ;
317
+ event . preventDefault ( ) ;
318
+ event . stopPropagation ( ) ;
319
+ }
320
+ }
321
+
307
322
/**
308
323
* Check the current scrollHeight of the textarea (minus any padding) and
309
324
* divide by line height to get the total number of rows for the textarea.
0 commit comments