29 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | export function getScrollParent(el) { | ||
|  |   let includeHidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | ||
|  |   while (el) { | ||
|  |     if (includeHidden ? isPotentiallyScrollable(el) : hasScrollbar(el)) return el; | ||
|  |     el = el.parentElement; | ||
|  |   } | ||
|  |   return document.scrollingElement; | ||
|  | } | ||
|  | export function getScrollParents(el, stopAt) { | ||
|  |   const elements = []; | ||
|  |   if (stopAt && el && !stopAt.contains(el)) return elements; | ||
|  |   while (el) { | ||
|  |     if (hasScrollbar(el)) elements.push(el); | ||
|  |     if (el === stopAt) break; | ||
|  |     el = el.parentElement; | ||
|  |   } | ||
|  |   return elements; | ||
|  | } | ||
|  | export function hasScrollbar(el) { | ||
|  |   if (!el || el.nodeType !== Node.ELEMENT_NODE) return false; | ||
|  |   const style = window.getComputedStyle(el); | ||
|  |   return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight; | ||
|  | } | ||
|  | function isPotentiallyScrollable(el) { | ||
|  |   if (!el || el.nodeType !== Node.ELEMENT_NODE) return false; | ||
|  |   const style = window.getComputedStyle(el); | ||
|  |   return ['scroll', 'auto'].includes(style.overflowY); | ||
|  | } | ||
|  | //# sourceMappingURL=getScrollParent.mjs.map
 |