@vnmfify/core
Version:
```shell npm i @vnmfify/core -S ```
99 lines (83 loc) • 3.27 kB
JavaScript
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