自适应div盒子高度

  • 自定义指令


    image.png

adaptive.js :

// 设置Dom高度
const doResize = async (el, binding, vnode) => {
    // 获取Dom对象
    // 获取调用传递过来的数据 
    const {
      value
    } = binding
  
    // 获取距底部距离(用于展示页码等信息)
    const bottomOffset = (value && value.bottomOffset) || 30
  
  
    // 计算列表高度并设置
    let height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
    if(height<400){
      height = 600;//设置最小高度
    }
    if(height>1170){
      height = 1170;//设置最大高度
    }
    el.style.height = height + 'px';
  }
  
  export default {
    // 初始化设置
    bind(el, binding, vnode) {
      // 设置resize监听方法
      el.resizeListener = async () => {
        await doResize(el, binding, vnode)
      }
      // 绑定监听方法到addResizeListener
      // addResizeListener(window.document.body, el.resizeListener)
      window.addEventListener('resize', el.resizeListener)
    },
    update(el, binding, vnode) {
      doResize(el, binding, vnode)
    },
    // 绑定默认高度
    async inserted(el, binding, vnode) {
      await doResize(el, binding, vnode)
    },
    // 销毁时设置
    unbind(el) {
      // 移除resize监听
      // removeResizeListener(el, el.resizeListener)
      window.removeEventListener('resize', el.resizeListener)
    }
  }

index.js

import adaptive from './adaptive'

const install = function(Vue) {   
  // 绑定v-adaptive指令
  Vue.directive('adaptive', adaptive)
}

if (window.Vue) {
  window['adaptive'] = adaptive  
  // eslint-disable-next-line no-undef 
  Vue.use(install)
}

adaptive.install = install

export default adaptive
  • main.js 引用
//导入自定义指令 表格高度
import adaptive from '@/utils/tableHeight'
Vue.use(adaptive)
  • 使用
...

原文链接:https://juejin.im/post/5eb907d46fb9a0432f0ffac3

你可能感兴趣的:(自适应div盒子高度)