import { reactive, nextTick } from 'vue'
export function useMediaQuery(breakpoints, onChange) {
let matches = reactive({})
let start = 1
let querys = []
breakpoints.forEach((bp) => {
querys.push(`(min-width:${start}px) and (max-width:${bp - 1}px)`)
start = bp
})
querys.push(`(min-width:${start}px)`)
let mqlList = querys.map((q) => window.matchMedia(q))
mqlList.forEach((mql, idx) => {
matches['bp' + idx] = mql.matches
matches['range-bp' + idx] = querys[idx]
mql.fn = (ev) => {
matches['bp' + idx] = ev.matches
ev.matches && nextTick(onChange)
}
mql.addEventListener('change', mql.fn)
})
function destory() {
mqlList.forEach((mql) => mql.removeEventListener('change', mql.fn))
mqlList = null
}
return { matches, destory }
}