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
 |