UNPKG

2.09 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = position;
7
8var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10var _css = _interopRequireDefault(require("./css"));
11
12var _offset = _interopRequireDefault(require("./offset"));
13
14var _offsetParent = _interopRequireDefault(require("./offsetParent"));
15
16var _scrollLeft = _interopRequireDefault(require("./scrollLeft"));
17
18var _scrollTop = _interopRequireDefault(require("./scrollTop"));
19
20var nodeName = function nodeName(node) {
21 return node.nodeName && node.nodeName.toLowerCase();
22};
23/**
24 * Returns the relative position of a given element.
25 *
26 * @param node the element
27 * @param offsetParent the offset parent
28 */
29
30
31function position(node, offsetParent) {
32 var parentOffset = {
33 top: 0,
34 left: 0
35 };
36 var offset; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
37 // because it is its only offset parent
38
39 if ((0, _css.default)(node, 'position') === 'fixed') {
40 offset = node.getBoundingClientRect();
41 } else {
42 var parent = offsetParent || (0, _offsetParent.default)(node);
43 offset = (0, _offset.default)(node);
44 if (nodeName(parent) !== 'html') parentOffset = (0, _offset.default)(parent);
45 var borderTop = String((0, _css.default)(parent, 'borderTopWidth') || 0);
46 parentOffset.top += parseInt(borderTop, 10) - (0, _scrollTop.default)(parent) || 0;
47 var borderLeft = String((0, _css.default)(parent, 'borderLeftWidth') || 0);
48 parentOffset.left += parseInt(borderLeft, 10) - (0, _scrollLeft.default)(parent) || 0;
49 }
50
51 var marginTop = String((0, _css.default)(node, 'marginTop') || 0);
52 var marginLeft = String((0, _css.default)(node, 'marginLeft') || 0); // Subtract parent offsets and node margins
53
54 return (0, _extends2.default)({}, offset, {
55 top: offset.top - parentOffset.top - (parseInt(marginTop, 10) || 0),
56 left: offset.left - parentOffset.left - (parseInt(marginLeft, 10) || 0)
57 });
58}
59
60module.exports = exports["default"];
\No newline at end of file