UNPKG

@vnmfify/core

Version:

```shell npm i @vnmfify/core -S ```

99 lines (83 loc) 3.27 kB
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } import { createSelectorQuery } from "@vnxjs/vnmf"; import { inBrowser } from "../base"; import { getComputedStyle } from "./computed-style"; import { elementUnref, isRootElement, queryNodesRef } from "./element"; var defaultRoot = inBrowser ? window : undefined; var ELEMENT_NODE_TYPE = 1; var overflowScrollReg = /scroll|auto/i; function isElementNode(node) { return node.tagName !== "HTML" && node.tagName !== "BODY" && node.nodeType === ELEMENT_NODE_TYPE; } export function getScrollParent(_x) { return _getScrollParent.apply(this, arguments); } function _getScrollParent() { _getScrollParent = _asyncToGenerator(function* (elementOrRef) { var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultRoot; var node = elementUnref(elementOrRef); while (node && node !== root && isElementNode(node)) { var { overflowY } = yield getComputedStyle(node, ["overflowY"]); if (overflowScrollReg.test(overflowY)) { return node; } if (isRootElement(node)) { return node; } node = node.parentNode; } return root; }); return _getScrollParent.apply(this, arguments); } export function getRootScrollTop() { return new Promise(resolve => { if (inBrowser) { resolve(window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0); } else { createSelectorQuery().selectViewport().scrollOffset(_ref => { var { scrollTop } = _ref; return resolve(scrollTop); }).exec(); } }); } function makeScrollOffset() { return { scrollTop: 0, scrollLeft: 0 }; } export function getScrollOffset(elementOrRef) { var element = elementUnref(elementOrRef); if (element) { if (inBrowser) { var $element = element; var top = "scrollTop" in element ? $element.scrollTop : $element["pageYOffset"]; var left = "scrollLeft" in element ? $element.scrollLeft : $element["pageXOffset"]; return Promise.resolve({ scrollTop: Math.max(top, 0), scrollLeft: Math.max(left, 0) }); } else { return new Promise(resolve => { queryNodesRef(element).scrollOffset(resolve).exec(); }); } } return Promise.resolve(makeScrollOffset()); } export function getScrollTop(elementOrRef) { return getScrollOffset(elementOrRef).then(_ref2 => { var { scrollTop } = _ref2; return scrollTop; }); } //# sourceMappingURL=scroll.js.map