@flexis/ui
Version:
Styleless React Components
33 lines • 2.6 kB
JavaScript
/**
* Move element from overflow.
* @param element - Element to set position.
* @param positionTop - Top position of element.
* @param positionLeft - Left position of element.
* @return Overflow offset was set or not.
*/
export default function setOverflowOffset(element, positionTop, positionLeft) {
const { clientWidth, clientHeight } = document.documentElement;
const { style } = element;
const { top, left, width, height } = element.getBoundingClientRect();
const right = clientWidth - (left + width);
const bottom = clientHeight - (top + height);
let withOverflowOffset = false;
if (top < 0) {
style.top = `${positionTop - top}px`;
withOverflowOffset = true;
}
else if (bottom < 0) {
style.top = `${positionTop + bottom}px`;
withOverflowOffset = true;
}
if (right < 0) {
style.left = `${positionLeft + right}px`;
withOverflowOffset = true;
}
else if (left < 0) {
style.left = `${positionLeft - left}px`;
withOverflowOffset = true;
}
return withOverflowOffset;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0T3ZlcmZsb3dPZmZzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb21tb24vc2V0T3ZlcmZsb3dPZmZzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sVUFBVSxpQkFBaUIsQ0FDeEMsT0FBb0IsRUFDcEIsV0FBbUIsRUFDbkIsWUFBb0I7SUFHcEIsTUFBTSxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQzdCLE1BQU0sRUFDTCxLQUFLLEVBQ0wsR0FBRyxPQUFPLENBQUM7SUFDWixNQUFNLEVBQ0wsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDcEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM3QyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUUvQixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7UUFDWixLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLGtCQUFrQixHQUFHLElBQUksQ0FBQztLQUMxQjtTQUNELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNmLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUM7UUFDeEMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0tBQzFCO0lBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2QsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLFlBQVksR0FBRyxLQUFLLElBQUksQ0FBQztRQUN6QyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7S0FDMUI7U0FDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7UUFDYixLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDO1FBQ3hDLGtCQUFrQixHQUFHLElBQUksQ0FBQztLQUMxQjtJQUVELE9BQU8sa0JBQWtCLENBQUM7QUFDM0IsQ0FBQyJ9