118 lines
2.7 KiB
JavaScript
118 lines
2.7 KiB
JavaScript
|
export default class DomHelpers {
|
||
|
static getViewport() {
|
||
|
let win = window,
|
||
|
d = document,
|
||
|
e = d.documentElement,
|
||
|
g = d.getElementsByTagName("body")[0],
|
||
|
w = win.innerWidth || e.clientWidth || g.clientWidth,
|
||
|
h = win.innerHeight || e.clientHeight || g.clientHeight;
|
||
|
|
||
|
return { width: w, height: h };
|
||
|
}
|
||
|
|
||
|
static getOffset(el) {
|
||
|
if (el) {
|
||
|
let rect = el.getBoundingClientRect();
|
||
|
|
||
|
return {
|
||
|
top:
|
||
|
rect.top +
|
||
|
(window.pageYOffset ||
|
||
|
document.documentElement.scrollTop ||
|
||
|
document.body.scrollTop ||
|
||
|
0),
|
||
|
left:
|
||
|
rect.left +
|
||
|
(window.pageXOffset ||
|
||
|
document.documentElement.scrollLeft ||
|
||
|
document.body.scrollLeft ||
|
||
|
0),
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
top: "auto",
|
||
|
left: "auto",
|
||
|
};
|
||
|
}
|
||
|
|
||
|
static getOuterWidth(el, margin) {
|
||
|
if (el) {
|
||
|
let width = el.offsetWidth;
|
||
|
|
||
|
if (margin) {
|
||
|
let style = getComputedStyle(el);
|
||
|
width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);
|
||
|
}
|
||
|
|
||
|
return width;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static getHiddenElementOuterWidth(element) {
|
||
|
if (element) {
|
||
|
element.style.visibility = "hidden";
|
||
|
element.style.display = "block";
|
||
|
let elementWidth = element.offsetWidth;
|
||
|
element.style.display = "none";
|
||
|
element.style.visibility = "visible";
|
||
|
|
||
|
return elementWidth;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static getHiddenElementOuterHeight(element) {
|
||
|
if (element) {
|
||
|
element.style.visibility = "hidden";
|
||
|
element.style.display = "block";
|
||
|
let elementHeight = element.offsetHeight;
|
||
|
element.style.display = "none";
|
||
|
element.style.visibility = "visible";
|
||
|
|
||
|
return elementHeight;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static calculateScrollbarWidth(el) {
|
||
|
if (el) {
|
||
|
let style = getComputedStyle(el);
|
||
|
return (
|
||
|
el.offsetWidth -
|
||
|
el.clientWidth -
|
||
|
parseFloat(style.borderLeftWidth) -
|
||
|
parseFloat(style.borderRightWidth)
|
||
|
);
|
||
|
} else {
|
||
|
if (this.calculatedScrollbarWidth != null)
|
||
|
return this.calculatedScrollbarWidth;
|
||
|
|
||
|
let scrollDiv = document.createElement("div");
|
||
|
scrollDiv.className = "p-scrollbar-measure";
|
||
|
document.body.appendChild(scrollDiv);
|
||
|
|
||
|
let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
|
||
|
document.body.removeChild(scrollDiv);
|
||
|
|
||
|
this.calculatedScrollbarWidth = scrollbarWidth;
|
||
|
|
||
|
return scrollbarWidth;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static generateZIndex() {
|
||
|
this.zIndex = this.zIndex || 1000;
|
||
|
return ++this.zIndex;
|
||
|
}
|
||
|
|
||
|
static revertZIndex() {
|
||
|
this.zIndex = 1000 < this.zIndex ? --this.zIndex : 1000;
|
||
|
}
|
||
|
|
||
|
static getCurrentZIndex() {
|
||
|
return this.zIndex;
|
||
|
}
|
||
|
}
|