autoHeight.vue 高度自适应

autoHeight.vue 高度自适应

<!--
* @description 自适应高度
* @fileName autoHeight.vue
* @author 彭成刚
* @date 2019/03/11 09:45:38
* @version V1.0.0
<autoHeight v-model="s1Height"
                  :allHeight='0'
                  :precent='20'
                  :diffHeight='0'>
  <table-s1 :height="s1Height"></table-s1>
</autoHeight>
!-->
<template>
  <div :style='styleHeight'>
    <slot></slot>
  </div>
</template>

<script>
export default {
  data () {
    return {
      allHeightData: 0,
      styleHeight: ''
    }
  },
  props: {
    value: {
      type: Number,
      default: 0
    },
    noStyle: {
      type: Boolean,
      default: false
    },
    allHeight: {
      type: Number,
      default: 0
    },
    precent: {
      type: Number,
      default: 100
    },
    diffHeight: {
      type: Number,
      default: 0
    }
  },

  components: {},

  computed: {},

  mounted () {
    this.calcHeight()
    window.addEventListener('resize', () => {
      this.calcHeight()
    })
    // window.innerHeight
  },
  watch: {
    'allHeight' (to, from) {
      this.calcHeight()
    },
    '$route' (to, from) {
      this.calcHeight()
    }
  },
  methods: {
    calcHeight () {
      let retHeight
      if (this.allHeight === 0) {
        this.allHeightData = window.innerHeight
      } else {
        this.allHeightData = this.allHeight
      }

      retHeight = (this.allHeightData * this.precent / 100) - this.diffHeight
      this.$emit('input', retHeight)

      if (!this.noStyle) {
        this.styleHeight = 'height: ' + retHeight + 'px; overflow-y:auto;'
      }
    }

  }
}

</script>
<style lang='less' scoped>
</style>

  

猜你喜欢

转载自www.cnblogs.com/pengchenggang/p/10510457.html