ukelli-ui
Version:
Base on React's UI lib. Make frontend's dev simpler and faster.
55 lines (54 loc) • 1.71 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { getScrollTop } from './scroll';
/**
* 获取元素的 OffsetLeft 和 OffsetTop 信息,包括滚动后的偏移量
*/
export function getElementOffset(element) {
if (!element) {
throw Error('需要传入 Element');
}
var actualTop = element.offsetTop;
var actualLeft = element.offsetLeft;
var current = element.offsetParent;
while (current !== null) {
actualLeft += (current.offsetLeft + current.clientLeft - current.scrollLeft);
actualTop += (current.offsetTop + current.clientTop - current.scrollTop);
current = current.offsetParent;
}
/** 需要把 body 的滚动加上 */
actualTop -= getScrollTop();
return {
offsetLeft: actualLeft,
offsetTop: actualTop
};
}
/**
* 获取元素的 offsetLeft
*/
export function getElementLeft(element) {
return getElementOffset(element).offsetLeft;
}
/**
* 获取元素的 offsetTop
*/
export function getElementTop(element) {
return getElementOffset(element).offsetTop;
}
/**
* 获取元素的 Offset 信息
*/
export function getElementOffsetInfo(element) {
var offsetHeight = element.offsetHeight, offsetWidth = element.offsetWidth;
return __assign(__assign({}, getElementOffset(element)), { offsetHeight: offsetHeight,
offsetWidth: offsetWidth });
}