12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { debounce, observerDomResize } from '../util/index'
- export default {
- data() {
- return {
- dom: '',
- width: 0,
- height: 0,
- debounceInitWHFun: '',
- domObserver: ''
- }
- },
- methods: {
- async autoResizeMixinInit() {
- const { initWH, getDebounceInitWHFun, bindDomResizeCallback, afterAutoResizeMixinInit } = this
- await initWH(false)
- getDebounceInitWHFun()
- bindDomResizeCallback()
- if (typeof afterAutoResizeMixinInit === 'function') afterAutoResizeMixinInit()
- },
- initWH(resize = true) {
- const { $nextTick, $refs, ref, onResize } = this
- return new Promise((resolve) => {
- $nextTick((_) => {
- const dom = (this.dom = $refs[ref])
- // this.width = dom ? dom.clientWidth : 0
- // this.height = dom ? dom.clientHeight : 0
- this.width = window.innerWidth
- this.height = window.innerHeight
- if (!dom) {
- console.warn('DataV: Failed to get dom node, component rendering may be abnormal!')
- } else if (!this.width || !this.height) {
- console.warn('DataV: Component width or height is 0px, rendering abnormality may occur!')
- }
- if (typeof onResize === 'function' && resize) onResize()
- resolve()
- })
- })
- },
- getDebounceInitWHFun() {
- const { initWH } = this
- this.debounceInitWHFun = debounce(100, initWH)
- },
- bindDomResizeCallback() {
- const { dom, debounceInitWHFun } = this
- this.domObserver = observerDomResize(dom, debounceInitWHFun)
- window.addEventListener('resize', debounceInitWHFun)
- },
- unbindDomResizeCallback() {
- let { domObserver, debounceInitWHFun } = this
- if (!domObserver) return
- domObserver.disconnect()
- domObserver.takeRecords()
- domObserver = null
- window.removeEventListener('resize', debounceInitWHFun)
- }
- },
- mounted() {
- const { autoResizeMixinInit } = this
- autoResizeMixinInit()
- },
- beforeDestroy() {
- const { unbindDomResizeCallback } = this
- unbindDomResizeCallback()
- }
- }
|