代码编织梦想

一、需求背景:

数据可视化大屏是一种将数据、信息和可视化效果集中展示在一块或多块大屏幕上的技术。通过各种图形、图表、数据可视化等方式,将复杂的数据和信息变得直观、易懂,让人们能够快速地了解数据和信息的含义。

应对现在数据可视化的趋势,越来越多企业需要在很多场景(营销数据,生产数据,用户数据)下使用,可视化图表来展示体现数据,让数据更加直观,数据特点更加突出。

根据不同的业务场景,做一个好的大屏需要考虑大屏布局、图表展现、交互动效、操作是否简单、是否能自适应等等因素。其中大屏是否能自适应也是一个比较重要的因素。

在做可视化大屏时,大屏的分辨率基本都是固定死的,因此我们只需要把页面按照设计稿尺寸写死即可,但是我们开发屏幕很小,这时候总要将浏览器进行缩小,这里给出一个通用方法,供大家使用,无需缩放浏览器。

二、需求分析:

本示例按照1920*1080的分辨率来写,也就是16:9的比例。你也可以替换成你自己的分辨率。效果是一样的。

做大屏项目时,需要适配不同屏幕,且在任意屏幕下保持16:9的比例,保持显示效果一致,屏幕比例不一致两边留白即可。

不同屏幕宽高比例(和设计稿16:9)相比会有两种情况:

  • 更宽:(Width / Height) > 16/9,以高度为基准,去适配宽度。

  • 更高:(Width / Height) < 16/9,以宽度为基准,去适配高度。

三、选择方案:

首先我们严格按照给定的UI设计稿的宽高尺寸画页面。然后我们再去计算一下放大或者缩小的倍数。

这时候要注意了,因为每块屏幕不一样,所以这个缩放的数值不是个固定的值,所以是个变量。这时候我们就要进入页面的时候计算出来这个缩放值。

利用transform的scale属性缩放,缩放整个页面。

我们还使用transform-origin属性将缩放的中心点设置为左上角,以确保大屏幕按比例缩放。

四、实现代码:

1、新建autoResizeScreenMixin.js

export default {
    data() {
        return {
            width: 1920,
            height: 1080,
        }
    },
    mounted() {
        this.autoResizeScreen();
        window.addEventListener('resize', this.autoResizeScreen);
    },
    methods: {
        autoResizeScreen() {
            let rect = this.$refs.AutoScalContainerRef.getBoundingClientRect()
            let DomRef = this.$refs.DomRef
            let clientWidth = rect.width
            let clientHeight = rect.height
            var width = this.width
            var height = this.height
            let left = 0
            let top = 0
            let scale = 0
            let ratio = width / height;
            if ((clientWidth / clientHeight) > ratio) {
                scale = clientHeight / height;
                top = 0;
                left = (clientWidth - width * scale) / 2;
            } else {
                scale = clientWidth / width;
                left = 0;
                top = (clientHeight - height * scale) / 2;
            }
            Object.assign(DomRef.style, {
                transform: `scale(${scale})`,
                left: `${left}px`,
                top: `${top}px`,
            });
        }
    },
    beforeDestroy() {
        window.removeEventListener('resize', this.autoResizeScreen);
    },
}

2、在app.vue的页面下使用

<template>
  <div id="app">
    <div class="auto-scal-container" ref="AutoScalContainerRef">
      <div ref="DomRef" class="auto-scal-container-inner">
        <router-view />
      </div>
    </div>
  </div>
</template>

<script>
import autoResizeScreenMixin from '@/utils/autoResizeScreenMixin ';
export default {
  mixins: [autoResizeScreenMixin]
}
</script>

3、在HomeView.vue页面写大屏代码布局

<template>
  <div class="custom-big-box">
    <div class="top">头部</div>
    <div class="bot">
      <div class="left">左侧</div>
      <div class="mid">
        <div class="midtop">卡片</div>
        <div class="midbot">地图</div>
      </div>
      <div class="right">右侧</div>
    </div>
  </div>
</template>

<script>
export default {

}
</script>

<style>
.custom-big-box {
  width: 1920px;
  height: 1080px;
  font-size: 26px;
  color: #fff;
  text-align: center;
  line-height: 100px;
}

.top {
  width: 100%;
  height: 100px;
  background-color: #409EFF;
}

.bot {
  padding: 20px;
  padding-top: 0;
  display: flex;
  height: 980px;
  background-color: #DCDFE6;
}

.left {
  width: 400px;
  height: 960px;
  background-color: #67C23A;
}

.mid {
  width: 1080px;
  height: 960px;
}

.right {
  width: 400px;
  height: 960px;
  background-color: #E6A23C;
}

.midtop {
  height: 100px;
  width: 100%;
  background-color: #F56C6C;
}

.midbot {
  width: 100%;
  height: 860px;
  background-color: #909399;
}
</style>
五、效果预览:
  • 效果预览合适的分辨率:
    在这里插入图片描述

  • 效果预览更宽:
    在这里插入图片描述

  • 效果预览更高:

在这里插入图片描述

六、封装组件:

当然你也可以封装个组件来使用。

我这边上传了一个我封装好的组件示例。在顶部可以下载。

可以在一个项目里面,使用不同分辨率或比例的大屏页面。

这里我做了3中比例的示例演示:(16:9的,4:3的,不规则的)

通过传参width,height即可适应缩放。

代码里面创建了AutoScalContainer组件,建了3个示例页面,演示不同分辨率或比例的大屏页面的效果。

  • AboutView.vue是1920*1080的分辨率大屏页面(16:9)
  • HomeView.vue是8400*3150的分辨率大屏页面(不规则)
  • HelloWorld.vue是1024*768的分辨率大屏页面(4:3)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shanghai597/article/details/135480724

大屏框架 等比缩放的页面(利用css3的scale属性)_有蝉的博客-爱代码爱编程_大屏等比例缩放

HTML <!DOCTYPE html> <html lang="en"> <head> <!-- 编码设置 --> <meta charset="utf-8"> <!-- 告诉IE使用最新的引擎渲染页面 --> <meta http-equi

Transform scale 属性-爱代码爱编程

使用 CSS Transform scale 属性 CSS 属性transform里面的scale()函数,可以用来改变元素的显示比例。 下面的例子把页面的段落元素放大了 2 倍:p { transform:scale(2); } transform属性有很多函数,可以对元素进行调整大小、移动、旋转、翻转等操作。当使用伪类描述元素的指定状态如:h

利用transform的scale(x, y)方法动态调整视频宽高大小实现满屏播放-爱代码爱编程

利用CSS中transform的scale(x, y)方法动态调整视频宽高大小实现满屏播放 导读: 当使用视频作为网页的动态壁纸时,经常会遇到视频大小和浏览器窗口大小不适应的情况,接下来的方法就能通过对视频进行动态调整实现视频自适应窗口大小的目的。 (文章前面是具体步骤,完整代码在最后) 一、梗概: (1)添加视频、CSS (2)获取视频及窗口大

html 自动缩放div,动态调整div的css缩放以适应容器的大小-爱代码爱编程

匿名用户 您可以有效地一步一步地缩小它,直到它适合容器。 这实际上是:对元素进行样式设置,使其自然溢出 一次降低5% 子元素小于其父元素时停止 nullfunction calcSize() { // The elements we need to use and our current scale var editor = docume

通过css3变型 transform 属性实现页面伸缩布局-爱代码爱编程

主要思想是判断当前页面宽高和设计的宽高的比例,进行比例缩放  这里以1920 和1080为例 function resize() { // 宽的比例 var ratioX = (document.documentElemen

transform动画_2764150442的博客-爱代码爱编程

CSS3中引入的 2D变化 2D的transform应用在x和y轴上,而3D的则多了一条z轴。 transform属性可以让元素实现变形,旋转,缩放等视觉效果。 2. Scale缩放 .box { transform: rotate(20deg); //顺时针 } .box2 { transform: rotate(-20deg); //

css3:2d转换transform之旋转与缩放_独憩的博客-爱代码爱编程

旋转 正的为顺时针  负的为逆时针 单位是度数 transform: rotate(90deg); 也可以定义旋转中心:可以简单定义到左上角等,也可以写具体的像素大小 transform-origin:left bottom; 案例: <style> .one{ overflow: h

常用的前端大屏 适配方案-爱代码爱编程

From: https://blog.csdn.net/ZXH0122/article/details/128639247 方案实现方式优点缺点 vm vh1.按照设计稿的尺寸,将px按比例计算转为vw和vh1.可以动态计算图表的宽高,字体等,灵活性较高 2.当屏幕比例跟 ui 稿不一致时,不会出现两边留白情况1.每个图表都需要单独做字体、间距

页面自适应 transform 放大或者缩小来进行实现-爱代码爱编程

<template> <div class="Aspecialist" id="page-view" v-resize="handleResize"> </div> </template> <script> export default { dire

vue如何使得大屏自适应的几种方法?_vue大屏自适应方案_幕飒前端程序员的博客-爱代码爱编程

VUE学习大屏自适应的几种方法 1.自适屏幕,始终保持16:9的比例 <!-- 大屏固定比例16:9自适应 --> <template> <div class="container"> <div class="content" :style="getAspectRatio

transform:scale实现大屏自适应-爱代码爱编程

小结一波~ 前言 大屏使用rem 耗时 而且对浏览器最小字体不支持,使用transform:scale可以节省百分之九十工作量且保证页面宽高在任何情况下等比例缩放 一、使用步骤 1.在src文件下的utils文件夹里新建fixer.js文件(名字自定义) 代码如下(示例): //先用设计图3840x1080的模式当基础宽高,项目

css的transform样式计算-爱代码爱编程

本文作者为 360 奇舞团前端开发工程师 引言 在使用 css 样式进行样式的缩放、旋转等设置时,思考了一下它的较浅层的原理,恩,这个阶段都 是一些初高的数学计算,从新看这里的时候顺便捡了捡初高中的数学,比如三角函数之类。 通用公式 image.png 假设 A * B = Y。其中,A 为 m

大屏自适应布局rem-爱代码爱编程

先说段废话: 大屏自适应适配也有一种方案是媒体查询,因为媒体查询个人觉得存在卡顿现象,因为是区间卡控,所以现在主流还是用rem和em做适配的比较多一点 下面代码中,js中的先给html根节点设置fontSize初始值为