@@ -253,20 +253,31 @@ class WidgetWindow {
253253 this . _body = this . _create ( "div" , "wfWinBody" , this . _frame ) ;
254254 this . _toolbar = this . _create ( "div" , "wfbToolbar" , this . _body ) ;
255255
256- const disableScroll = ( ) => {
257- // Get the current page scroll position
258- const scrollTop = window . pageYOffset || document . documentElement . scrollTop ;
259- const scrollLeft = window . pageXOffset || document . documentElement . scrollLeft ;
260- // if any scroll is attempted,
261- // set this to the previous value
262- window . onscroll = ( ) => {
263- window . scrollTo ( scrollLeft , scrollTop ) ;
264- } ;
265- } ;
266-
267256 this . _widget = this . _create ( "div" , "wfbWidget" , this . _body ) ;
268- this . _widget . addEventListener ( "wheel" , disableScroll , { passive : true } ) ;
269- this . _widget . addEventListener ( "DOMMouseScroll" , disableScroll , { passive : true } ) ;
257+ this . _widgetWheelHandler = event => {
258+ const deltaY =
259+ typeof event . deltaY === "number"
260+ ? event . deltaY
261+ : typeof event . detail === "number"
262+ ? event . detail * 16
263+ : 0 ;
264+ const deltaX = typeof event . deltaX === "number" ? event . deltaX : 0 ;
265+
266+ this . _widget . scrollTop += deltaY ;
267+ this . _widget . scrollLeft += deltaX ;
268+
269+ if ( event . cancelable ) {
270+ event . preventDefault ( ) ;
271+ }
272+
273+ event . stopPropagation ( ) ;
274+ } ;
275+ this . _widget . addEventListener ( "wheel" , this . _widgetWheelHandler , {
276+ passive : false
277+ } ) ;
278+ this . _widget . addEventListener ( "DOMMouseScroll" , this . _widgetWheelHandler , {
279+ passive : false
280+ } ) ;
270281 }
271282
272283 /**
@@ -630,10 +641,10 @@ class WidgetWindow {
630641 if ( this . _docMouseDownHandler ) {
631642 document . removeEventListener ( "mousedown" , this . _docMouseDownHandler , true ) ;
632643 }
633- // Clear the scroll lock that may have been set by the disableScroll
634- // handler in _createUIelements(). Without this, window.onscroll remains
635- // permanently overridden after the widget is closed, freezing page scroll.
636- window . onscroll = null ;
644+ if ( this . _widget && this . _widgetWheelHandler ) {
645+ this . _widget . removeEventListener ( "wheel" , this . _widgetWheelHandler , false ) ;
646+ this . _widget . removeEventListener ( "DOMMouseScroll" , this . _widgetWheelHandler , false ) ;
647+ }
637648 if ( this . _frame && this . _frame . parentElement ) {
638649 this . _frame . parentElement . removeChild ( this . _frame ) ;
639650 }
0 commit comments