quasar-framework
Version:
Simultaneously build desktop/mobile SPA websites & phone/tablet apps with VueJS
28 lines (26 loc) • 611 B
JavaScript
import { viewport } from '../../utils/dom'
import { listenOpts } from '../../utils/event'
export default {
name: 'q-window-resize-observable',
render () {},
methods: {
trigger () {
if (!this.timer) {
this.timer = window.requestAnimationFrame(this.emit)
}
},
emit () {
this.timer = null
this.$emit('resize', viewport())
}
},
created () {
this.emit()
},
mounted () {
window.addEventListener('resize', this.trigger, listenOpts.passive)
},
beforeDestroy () {
window.removeEventListener('resize', this.trigger, listenOpts.passive)
}
}