UNPKG

web-ui-pack

Version:
54 lines (53 loc) 1.26 kB
function hasFixedPos(el) { const p = el.style.position; const n = "fixed"; return p === n || (!p && window.getComputedStyle(el).position === n); } export default function findScrollParent(el) { const p = el.parentElement; if (!p) { return null; } if (p.scrollTop > 0 || p.scrollLeft > 0) { return p; } const orig = p.onscroll; p.onscroll = (e) => { e.stopImmediatePropagation(); }; let prev = p.scrollTop; p.scrollTop += 10; if (prev !== p.scrollTop) { p.scrollTop = prev; setTimeout(() => (p.onscroll = orig), 1); return p; } prev = p.scrollLeft; p.scrollLeft += 10; if (prev !== p.scrollLeft) { p.scrollLeft = prev; setTimeout(() => (p.onscroll = orig), 1); return p; } p.onscroll = orig; if (hasFixedPos(p)) { return null; } return findScrollParent(p); } export function findScrollParentAll(el) { let l = el; const arr = []; while (1) { l = findScrollParent(l); if (l) { arr.push(l); if (hasFixedPos(l)) { break; } } else break; } return arr.length ? arr : null; }