react-grid-carousel
Version:
React resposive carousel component w/ grid layout
37 lines (29 loc) • 872 B
JavaScript
import debounce from 'lodash.debounce'
const HANDLER_NAME_SPACE = '__react-grid-carousle-resize-handler'
const handleResize = debounce(e => {
Object.values(window[HANDLER_NAME_SPACE]).forEach(handler => {
if (typeof handler === 'function') {
handler(e)
}
})
}, 16)
const setupListener = () => {
window.addEventListener('resize', handleResize)
}
const removeListener = () => {
window.removeEventListener('resize', handleResize)
}
export const addResizeHandler = (key, handler) => {
if (typeof window[HANDLER_NAME_SPACE] !== 'object') {
window[HANDLER_NAME_SPACE] = {}
setupListener()
}
window[HANDLER_NAME_SPACE][key] = handler
}
export const removeResizeHandler = key => {
delete window[HANDLER_NAME_SPACE][key]
if (!Object.keys(window[HANDLER_NAME_SPACE])) {
delete window[HANDLER_NAME_SPACE]
removeListener()
}
}