fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
43 lines (42 loc) • 1.34 kB
JavaScript
//#region src/util/dom_misc.ts
/**
* Returns element scroll offsets
* @param {HTMLElement} element Element to operate on
* @return {Object} Object with left/top values
*/
function getScrollLeftTop(element) {
const doc = element && getDocumentFromElement(element);
let left = 0, top = 0;
if (!element || !doc) return {
left,
top
};
let elementLoop = element;
const docElement = doc.documentElement, body = doc.body || {
scrollLeft: 0,
scrollTop: 0
};
while (elementLoop && (elementLoop.parentNode || elementLoop.host)) {
elementLoop = elementLoop.parentNode || elementLoop.host;
if (elementLoop === doc) {
left = body.scrollLeft || docElement.scrollLeft || 0;
top = body.scrollTop || docElement.scrollTop || 0;
} else {
left += elementLoop.scrollLeft || 0;
top += elementLoop.scrollTop || 0;
}
if (elementLoop.nodeType === 1 && elementLoop.style.position === "fixed") break;
}
return {
left,
top
};
}
const getDocumentFromElement = (el) => el.ownerDocument || null;
const getWindowFromElement = (el) => {
var _el$ownerDocument;
return ((_el$ownerDocument = el.ownerDocument) === null || _el$ownerDocument === void 0 ? void 0 : _el$ownerDocument.defaultView) || null;
};
//#endregion
export { getDocumentFromElement, getScrollLeftTop, getWindowFromElement };
//# sourceMappingURL=dom_misc.mjs.map