Skip to content

Commit b741317

Browse files
committed
Defer scrolling to wheel event target if it has overflow
1 parent 2646370 commit b741317

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

packages/block-editor/src/components/block-popover/use-popover-scroll.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,24 @@ function usePopoverScroll( contentRef ) {
1717
const effect = useRefEffect(
1818
( node ) => {
1919
function onWheel( event ) {
20-
const { deltaX, deltaY } = event;
20+
const { deltaX, deltaY, target } = event;
2121
const contentEl = contentRef.current;
2222
let scrollContainer = scrollContainerCache.get( contentEl );
2323
if ( ! scrollContainer ) {
2424
scrollContainer = getScrollContainer( contentEl );
2525
scrollContainerCache.set( contentEl, scrollContainer );
2626
}
27-
scrollContainer.scrollBy( deltaX, deltaY );
27+
let eventScrollContainer = getScrollContainer( target );
28+
if ( ! eventScrollContainer ) {
29+
eventScrollContainer = getScrollContainer( contentEl );
30+
scrollContainerCache.set( contentEl, eventScrollContainer );
31+
}
32+
const { scrollHeight, offsetHeight } = eventScrollContainer;
33+
// Scrolls “through” the popover only if the event target wasn’t within
34+
// a scrollable container and thereby avoids scrolling both containers.
35+
if ( scrollHeight === offsetHeight ) {
36+
scrollContainer.scrollBy( deltaX, deltaY );
37+
}
2838
}
2939
// Tell the browser that we do not call event.preventDefault
3040
// See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners

0 commit comments

Comments
 (0)