@@ -70,14 +70,12 @@ function closeScrollStrategy (data: ScrollStrategyData) {
70
70
data . isActive . value = false
71
71
}
72
72
73
- bindScroll ( data . target . value ?? data . contentEl . value , onScroll )
73
+ bindScroll ( getTargetEl ( data . target . value , data . contentEl . value ) , onScroll )
74
74
}
75
75
76
76
function blockScrollStrategy ( data : ScrollStrategyData , props : StrategyProps ) {
77
77
const offsetParent = data . root . value ?. offsetParent
78
- const target = Array . isArray ( data . target . value )
79
- ? document . elementFromPoint ( ...data . target . value )
80
- : data . target . value
78
+ const target = getTargetEl ( data . target . value , data . contentEl . value )
81
79
const scrollElements = [ ...new Set ( [
82
80
...getScrollParents ( target , props . contained ? offsetParent : undefined ) ,
83
81
...getScrollParents ( data . contentEl . value , props . contained ? offsetParent : undefined ) ,
@@ -140,7 +138,7 @@ function repositionScrollStrategy (data: ScrollStrategyData, props: StrategyProp
140
138
141
139
ric = ( typeof requestIdleCallback === 'undefined' ? ( cb : Function ) => cb ( ) : requestIdleCallback ) ( ( ) => {
142
140
scope . run ( ( ) => {
143
- bindScroll ( data . target . value ?? data . contentEl . value , e => {
141
+ bindScroll ( getTargetEl ( data . target . value , data . contentEl . value ) , e => {
144
142
if ( slow ) {
145
143
// If the position calculation is slow,
146
144
// defer updates until scrolling is finished.
@@ -165,9 +163,16 @@ function repositionScrollStrategy (data: ScrollStrategyData, props: StrategyProp
165
163
} )
166
164
}
167
165
168
- /** @private */
169
- function bindScroll ( target : HTMLElement | [ x : number , y : number ] | undefined , onScroll : ( e : Event ) => void ) {
170
- const el = Array . isArray ( target ) ? document . elementFromPoint ( ...target ) : target
166
+ function getTargetEl (
167
+ target : HTMLElement | [ x : number , y : number ] | undefined ,
168
+ contentEl : HTMLElement | undefined ,
169
+ ) {
170
+ return Array . isArray ( target )
171
+ ? document . elementsFromPoint ( ...target ) . find ( el => ! contentEl ?. contains ( el ) )
172
+ : target ?? contentEl
173
+ }
174
+
175
+ function bindScroll ( el : Element | undefined , onScroll : ( e : Event ) => void ) {
171
176
const scrollElements = [ document , ...getScrollParents ( el ) ]
172
177
scrollElements . forEach ( el => {
173
178
el . addEventListener ( 'scroll' , onScroll , { passive : true } )
0 commit comments