react-16-dropdown
Version:
A zero-dependency, lightweight and fully customizable dropdown (not select) for React.
57 lines (47 loc) • 1.17 kB
JavaScript
export const optimizedResize = (function () {
const callbacks = [];
let running = false;
// run the actual callbacks
function runCallbacks() {
callbacks.forEach((callback) => {
callback();
});
running = false;
}
// fired on resize event
function resize() {
if (!running) {
running = true;
if (window.requestAnimationFrame) {
window.requestAnimationFrame(runCallbacks);
} else {
setTimeout(runCallbacks, 66);
}
}
}
// adds callback to loop
function addCallback(callback) {
if (callback) {
callbacks.push(callback);
}
}
return {
// public method to add additional callback
add(callback) {
if (!callbacks.length) {
window.addEventListener('resize', resize);
}
addCallback(callback);
},
};
}());
export function getAbsoluteBoundingRect(el) {
const clientRect = el.getBoundingClientRect();
const rect = {};
rect.left = window.scrollX + clientRect.left;
rect.top = window.scrollY + clientRect.top;
rect.right = clientRect.right;
rect.bottom = clientRect.bottom;
rect.height = clientRect.height;
return rect;
}