数据可视化大屏屏幕适配

效果

显示侧边栏时

隐藏侧边栏时

全屏时

原理

transform 根据父盒子尺寸与原图尺寸的比例缩放

代码

伸缩盒子组件ScaleBox

<template>
  <div class="scale_wrap" ref="scaleBoxRef">
    <div
      class="ScreenAdapter"
      :style="{
        width: canvasWidth + 'px',
        height: canvasHeight + 'px',
        ...style,
      }"
    >
      <slot />
    </div>
  </div>
</template>
<script>
// 监听盒子的尺寸变化
import ResizeObserver from 'resize-observer-polyfill'
export default {
  name: '',
  // 接收父组件传来的参数  (设计图尺寸)
  props: {
    width: {
      type: String,
      default: '1920',
    },
    height: {
      type: String,
      default: '1080',
    },
  },
  data() {
    return {
      // 整体等比例缩放
      style: {
        transform: 'scale(1,1) translate(-50%, -50%)',
      },
    }
  },
  // 画布实际宽高
  computed: {
    canvasWidth(){
      return this.width
    },
    canvasHeight(){
      return this.height
    },
  },
  mounted() {
    this.setScale()
    const robserver = new ResizeObserver(() => {
      console.log('robserver')
      this.setScale()
    })
    robserver.observe(this.$refs.scaleBoxRef)

  },
  methods: {
    // 设置比例
    setScale() {
      const { clientWidth, clientHeight } = this.$refs.scaleBoxRef
      // 相对于画布原始宽高的缩放比例
      const scaleX = clientWidth / this.canvasWidth
      const scaleY = clientHeight / this.canvasHeight
      this.style.transform = `scale(${scaleX}, ${scaleY}) translate(-50%, -50%)`
    },
  },
}
</script>
<style lang="less" scoped>
.scale_wrap {
  width: 100%;
  height: 100%;//父组件没高时100%不起作用需要给父组件手动给一个高
  position: relative;
  // background-color: rgba(1, 4, 41);
  .ScreenAdapter {
    transform-origin: 0 0;
    position: absolute;
    left: 50%;
    top: 50%;
    transition: 0.3s;
  }
}
</style>

伸缩盒子的使用

.big {
  width: 100%;
  height: 100%;
  background-image: url('~@/assets/big/bg.png');
}

全屏相关代码

<!-- 退出进入全屏icon -->
<a-popover :content="isFullscreen ? '退出全屏' : '进入全屏'">
  <a @click="getFullCreen" style="font-size: 20px; color: #fff" class="icon_togglefull">
    <a-icon :type="isFullscreen ? 'fullscreen-exit' : 'fullscreen'" />
  </a>
</a-popover>
// 全屏模式
getFullCreen() {
  if (!screenfull.isEnabled) {
    this.$message.warning('you browser can not work')
    return false
  }
  const element = document.getElementById('control')
  if (this.isFullscreen) {
    if (document.exitFullscreen) {
      document.exitFullscreen()
    } else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen()
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen()
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen()
    }
  } else {
    if (element.requestFullscreen) {
      element.requestFullscreen()
    } else if (element.webkitRequestFullScreen) {
      element.webkitRequestFullScreen()
    } else if (element.mozRequestFullScreen) {
      element.mozRequestFullScreen()
    } else if (element.msRequestFullscreen) {
      // IE11
      element.msRequestFullscreen()
    }
  }
  this.isFullscreen = !this.isFullscreen
},
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于Vue数据可视化大屏适配,可以采用CSS3的缩放属性进行等比缩放实现。阿里DataV和腾讯云图等大厂的数据可视化项目都采用了这种方案。在实际项目中,可以在mounted生命周期中监听窗口的变化,使用window.addEventListener('resize')来触发缩放操作。\[1\]\[2\] 在进行大屏适配之前,需要了解屏幕的比例。常见的屏幕比例有16:9,如1920*1080(1080P)、2k、4k等。在确定了实际屏幕比例后,可以选择一个设计稿尺寸进行设计,并严格按照设计稿的像素进行前端开发。下列适应方案可以适应同比例下的所有分辨率屏幕。\[3\] 综上所述,对于Vue数据可视化大屏适配,可以使用CSS3的缩放属性进行等比缩放,并在mounted生命周期中监听窗口变化进行缩放操作。在设计阶段需要确定实际屏幕比例,并按照设计稿的像素进行前端开发。 #### 引用[.reference_title] - *1* *3* [vue大屏可视化自适应完美方案](https://blog.csdn.net/u013180541/article/details/127302298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vue 数据可视化大屏适配](https://blog.csdn.net/qq_38427709/article/details/116857143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值