dom-helpers-extra
Version:
Related extension of dom-helpers
71 lines (56 loc) • 1.92 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _offset = _interopRequireDefault(require("dom-helpers/offset"));
var _css = _interopRequireDefault(require("dom-helpers/css"));
var _position = _interopRequireDefault(require("dom-helpers/position"));
function offset(node, coords) {
if (!coords) {
return (0, _offset.default)(node);
}
var curPosition,
curLeft,
curCSSTop,
curTop,
curOffset,
curCSSLeft,
calculatePosition,
positionState = (0, _css.default)(node, "position"),
props = {};
var targetPos = {}; // Set position first, in-case top/left are set even on static elem
if (positionState === "static") {
node.style.position = "relative";
}
curOffset = (0, _offset.default)(node);
curCSSTop = (0, _css.default)(node, "top");
curCSSLeft = (0, _css.default)(node, "left");
calculatePosition = (positionState === "absolute" || positionState === "fixed") && (curCSSTop + curCSSLeft).indexOf("auto") > -1; // Need to be able to calculate position if either
// top or left is auto and position is either absolute or fixed
if (calculatePosition) {
curPosition = (0, _position.default)(node);
curTop = curPosition.top;
curLeft = curPosition.left;
} else {
curTop = parseFloat(curCSSTop) || 0;
curLeft = parseFloat(curCSSLeft) || 0;
}
if (coords.top != null) {
targetPos.top = coords.top - curOffset.top + curTop;
props.top = targetPos.top + "px";
}
if (coords.left != null) {
targetPos.left = coords.left - curOffset.left + curLeft;
props.left = targetPos.left + "px";
}
if (coords.using) {
coords.using(targetPos);
} else {
(0, _css.default)(node, props);
}
return;
}
var _default = offset;
exports.default = _default;