大屏可视化:阿里 DataV 大屏怎么做自适应的?

news2024/9/23 21:21:01

你好,我是沐爸,欢迎点赞、收藏、评论和关注。

阿里 DataV 大屏是一款功能强大的数据可视化应用搭建工具,由阿里云提供,旨在帮助用户通过图形化的界面轻松搭建专业水准的可视化应用。

下面我们一起看下 DataV 大屏 是如何做自适应的?

了解 阿里 DataV 大屏,可注册账号免费试用,时长为1个月。随便打开一个大屏模板,点击画布,编辑器右侧会显示页面配置,其中“缩放方式”即为自适应方案,一共有5种。

一、全屏铺满

特点:
  • 铺满屏幕,不保持纵横比。
  • 页面元素可能被拉伸或压缩。

<template>
  <div id="root-el" :style="{ transform: 'scale(' + x + ',' + y + ')' }">
    这里放一张图片
  </div>
</template>

<script>
  export default {
    data() {
       return {
         x: 1,
         y: 1
       }
     },
    mounted() {
      this.x = window.innerWidth / 1920
      this.y = window.innerHeight / 1080
      window.onresize = () => {
        this.x = window.innerWidth / 1920
        this.y = window.innerHeight / 1080
      }
    }
  }
</script>     

二、等比宽度铺满可滚动

特点:
  • 保持纵横比。
  • 缩小时可能会留白。
  • 屏幕内容被遮挡时显示滚动条,未被遮挡时无滚动条。

<style>
  html {
    width: 100% !important;
    height: 100% !important;
    overflow: hidden !important;
  }
  body {
    width: 100%;
    height: 100%;
    overflow: hidden;
  }
  body:hover ::-webkit-scrollbar-thumb{
    display: block;
  }
  ::-webkit-scrollbar-thumb {
      display: none;
      background: #525252;
      border-radius: 2px
  }
  ::-webkit-scrollbar-track {
      background: transparent;
  }
  ::-webkit-scrollbar {
      display: block;
      width: 4px;
      height: 4px
  }
  ::-webkit-scrollbar-corner {
      background-color: transparent
  }
  #app {
    width: 100%;
    height: 100%;
  }
</style>
<template>
  <div id="root">
    <div class="preview-page">
      <div id="runtime">
        <div class="datav-common-hoc">
          <div class="datav-com-wrapper">
            <div class="datav-absolute-page-wp" :style="{ height: innerHeight + 'px' }">
              <div id="index" ref="appRef" :style="{ transform: 'scale(' + x + ')' }">
                <div class="bg">
                  ......
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      x: 1,
      y: 1,
      innerHeight: 1080
    }
  },
  mounted() {
    this.x = window.innerWidth / 1920
    this.y = window.innerHeight / 1080
    this.innerHeight = 1080 * this.x
    window.onresize = () => {
      this.x = window.innerWidth / 1920
      this.y = window.innerHeight / 1080
      this.innerHeight = 1080 * this.x
    }
  }
}
</script>

<style lang="scss" scoped>
  #root {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    .preview-page {
      width: 100%;
      height: 100%;
      overflow: auto;
      flex: 1 1;
      #runtime {
        width: 100%;
        height: 100%;
        .datav-common-hoc {
          height: 100%;
          width: 100%;
          position: relative;
          .datav-com-wrapper {
            height: 100%;
            width: 100%;
            position: relative;
            transform: translate(0, 0);
            box-sizing: border-box;
            transform-origin: left top;
            overflow: inherit;
            .datav-absolute-page-wp {
              width: 100%;
              height: 100%;
              position: relative;
              overflow: hidden;
              #index {
                width: 1920px;
                height: 1080px;
                background: rgb(255, 255, 255);
                transform-origin: left top;
                overflow: hidden;
                .bg {
                  width: 100%;
                  height: 100%;
                  padding: 16px 16px 0 16px;
                  background-image: url("../assets/pageBg.png");
                  background-size: cover;
                  background-position: center center;
                }
              }
            }
          }
        }
      }
    }
  }
</style>

三、等比高度铺满居中

特点:
  • 保持纵横比
  • 页面居中显示,两侧可能留白。宽度不够时,两侧可能被隐藏。


<template>
  <div id="root">
    <div class="preview-page">
      <div id="runtime">
        <div class="datav-common-hoc">
          <div class="datav-com-wrapper">
            <!--datav-absolute-page-wp 不再动态设置高度-->
            <div class="datav-absolute-page-wp">
              <div id="index" ref="appRef" :style="{ transform: 'scale(' + x + ')', 'margin-left': ml + 'px' }">
                <div class="bg">
                  ......
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        x: 1,
        y: 1,
        ml: 0 // 水平方向的左外边距
      }
    },
    mounted() {
      this.x = window.innerWidth / 1920
      this.y = window.innerHeight / 1080
      this.ml = (window.innerWidth - 1920 * this.y) / 2
      window.onresize = () => {
        this.x = window.innerWidth / 1920
        this.y = window.innerHeight / 1080
        this.ml = (window.innerWidth - 1920 * this.y) / 2
      }
    }
  }
</script>

<style lang="scss" scoped>
  /*保持不变*/
</style>

四、等比高度可滚动

特点:
  • 保持纵横比
  • 窗口宽度大于内容宽度时,右侧留白。窗口宽度小于内容宽度时,显示滚动条。


<template>
  <div id="root">
    <div class="preview-page">
      <div id="runtime">
        <div class="datav-common-hoc">
          <div class="datav-com-wrapper">
            <div class="datav-absolute-page-wp" style="overflow-x: auto;">
              <div class="datav-absolute-page" :style="{width: scaleWidth + 'px', height: innerHeight + 'px'}">
                <div id="index" ref="appRef" :style="{ transform: 'scale(' + y + ')' }">
                  <div class="bg">
                    ......
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        x: 1,
        y: 1,
        scaleWidth: 1920
      }
    },
    mounted() {
      this.x = window.innerWidth / 1920
      this.y = window.innerHeight / 1080
      this.innerHeight = window.innerHeight
      this.scaleWidth = 1920 * this.y
      window.onresize = () => {
        this.x = window.innerWidth / 1920
        this.y = window.innerHeight / 1080
        this.innerHeight = window.innerHeight
        this.scaleWidth = 1920 * this.y
      }
    }
  }
</script>

<style lang="scss" scoped>
  /*保持不变*/
</style>

五、居中

特点:
  • 保持纵横比
  • 无论页面怎么缩放,总保持居中显示

<template>
  <div id="root">
    <div class="preview-page">
      <div id="runtime">
        <div class="datav-common-hoc">
          <div class="datav-com-wrapper">
            <div class="datav-absolute-page-wp">
              <div class="datav-absolute-page" :style="{transform: 'translateX(-50%) translateY(-50%) scale(' + dynamicScale + ')'}">
                <div id="index" ref="appRef">
                  <div class="bg">
                    ......
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        x: 1,
        y: 1,
        dynamicScale: 1
      }
    },
    mounted() {
      if (window.innerWidth / window.innerHeight < 1920 / 1080) {
        this.dynamicScale = (window.innerWidth / 1920)
      } else {
        this.dynamicScale = (window.innerHeight / 1080)
      }
      window.onresize = () => {
        if (window.innerWidth / window.innerHeight < 1920 / 1080) {
          this.dynamicScale = (window.innerWidth / 1920)
        } else {
          this.dynamicScale = (window.innerHeight / 1080)
        }
      }
    }
  }
</script>

<style lang="scss" scoped>
  .datav-absolute-page {
    width: 1920px;
    height: 1080px;
    background: rgb(255, 255, 255);
    transform: translateX(-50%) translateY(-50%) scale(0.550521);
    left: 50%;
    top: 50%;
    position: absolute;
  }
  /*其他保持不变*/
</style>

六、堪称完美的适配

DataV 大屏的5种自适应方案,多多少少都有些缺陷,有没有更完美的适配方式呢?看看下图

上面这种自适应如何实现?我们明天接着唠。

好了,分享结束,谢谢点赞,下期再见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2105458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【嵌入式】uint32值写入到二进制文件中的存储详情

背景 项目预留100字节用于存储参数文件。现在有些数值一个字节表示不够&#xff0c;需要用4个字节。比如数值1144201745&#xff0c;对应的十六进制0x44332211,那么在二进制中存储是怎么样的呢&#xff1f;做个总结 分析 写了一个sample&#xff0c;把uint32_t u32Value1{0x…

【ThreadLocal源码】深入浅出ThreadLocal

【ThreadLocal源码】深入浅出ThreadLocal-CSDN博客

Linux之Prometheus

认识普罗米修斯 1、prometheus介绍 Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合, 由go语言开发。 适合监控容器平台, 因为kubernetes(俗称k8s)的流行带动了prometheus的发展。 PS&#xff1a;文档使用prometheus监控物理服务器。 prometheus的…

数组程序基础知识

为了处理方便&#xff0c;把具有相同类型的变量按有序的形式组织起来。这些同类数据元素的集合称之为数组。数组可分为数值数组、字符数组、指针数组、结构数组等。 01--一维数组 在使用数组前需要先定义&#xff1a; 类型说明符 数组名[常量表达式]&#xff1b; 类型说明符…

因 Mysql root 密码过于简单导致 Mysql 连接失败的解决方法

问题&#xff1a; Access denied for user ‘root’‘192.168.xx.xx’ (using password: YES) 用户“root”“192.168.xx.xx”的访问被拒绝&#xff08;使用密码&#xff1a;YES&#xff09; 解决方法&#xff1a; 1、使用root用户登录mysql&#xff0c;通过下面的命令给ro…

数据管理能力成熟度评估模型DCMM

一、引言 DCMM&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;数据管理能力成熟度评估模型&#xff09;是我国首个数据管理领域国家标准&#xff08;GB/T 36073-2018&#xff09;&#xff0c;由中国国家标准化管理委员会于2018年3月15日发布&am…

FreeRTOS基础入门——FreeRTOS信号量及二值信号量(十三)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

智联云采 SRM2.0 autologin 身份认证绕过漏洞复现

0x01 产品简介 智联云采是一款针对企业供应链管理难题及智能化转型升级需求而设计的解决方案,针对企业供应链管理难题,及智能化转型升级需求,智联云采依托人工智能、物联网、大数据、云等技术,通过软硬件系统化方案,帮助企业实现供应商关系管理和采购线上化、移动化、智能…

【王树森】RNN模型与NLP应用(4/9):LSTM模型(个人向笔记)

前言 LSTM是对Simple RNN的改进&#xff0c;可以避免梯度消失的问题&#xff0c;能够有更长的记忆力。 LSTM 1. LSTM:Conveyor Belt 过去的信息 C t − 1 C_{t-1} Ct−1​ 通过一个传输带直接输送到下一个状态 C t C_t Ct​&#xff0c;不会发生太大的变化&#xff0c;由此…

激活函数 Sigmod 及其导数

文章目录 1. Sigmod 函数2. 取值3. 图像4. 导数 1. Sigmod 函数 Sigmod 函数是神经网络中最常用的激活函数之一&#xff0c;其形式如下&#xff1a; sigmod ( x ) f ( x ) 1 1 e − x . \text{sigmod}(x) f(x) \frac{1}{1 e^{-x}}. sigmod(x)f(x)1e−x1​. 2. 取值 分…

大模型理论基础

大模型理论基础与学习路径 1.大模型的理论基础&#xff0c;包括深度学习、预训练语言模型和大语言模型。 2.学习大模型开发的路径&#xff0c;包括理论学习、实践操作和项目应用。 3.如何通过理论学习提升上限&#xff0c;为深入学习大模型奠定基础。 GPT模型家族技术发展 1.GP…

数据结构——堆排序

目录 引言 堆排序 1.算法思想 2.算法步骤 3.代码实现 3.1 构建堆 (1)小堆 (2)大堆 3.2 交换与调整 3.3 重复上述过程 4.复杂度分析 5.完整代码 5.1算法实现代码 5.2 示例 6.堆排序的优势 结束语 引言 本篇博客&#xff0c;我们将利用堆结构实现的高效排序算法…

版本控制的核心:Git中的哈希与默克尔树解析

Git是最常用的代码版本控制工具。它帮助我们跟踪代码的更改、管理代码版本&#xff0c;同时保证代码库的完整性和安全性。我们知道 Git 中有一些基本的操作&#xff0c;比如commit、merge、rebase等&#xff0c;但这些操作的底层机制是如何实现的呢&#xff1f;哈希函数和默克尔…

深度学习|模型推理:端到端任务处理

文章目录 引言端到端的能力任务与模型简介手写数字识别数据准备训练集与测试集模型介绍 推理过程前向传播权重参数推理与评估 结语 引言 通过前文「深度学习&#xff5c;感知机&#xff1a;神经网络之始」中 XOR Gate 的示例&#xff0c;我们知道叠加层可以增强感知机的表达能…

单向链表排序及双向链表

单向链表的优缺点 优点&#xff1a;存储空间没有上限&#xff0c;插入删除效率高 缺点&#xff1a;修改和查找效率低&#xff0c;只能单向的向后遍历后续节点&#xff0c;不能向前遍历前驱节点 单向链表快慢指针法查找&#xff1a; 链表的排序 双向链表 由于单向链表只能通…

Linux 性能调优:策略与实践

引言 随着云计算和虚拟化技术的发展&#xff0c;Linux 已经成为企业和个人用户的首选操作系统。Linux 性能调优不仅有助于提高系统资源利用率&#xff0c;还能确保应用程序的高效运行。本文将探讨 Linux 性能调优的基本原则、常用工具和方法&#xff0c;以及实际案例分析。 一…

go中的并发处理

. Goroutines 概念&#xff1a; Goroutines 是 Go 的核心并发机制。它们是由 Go 运行时管理的轻量级线程&#xff0c;具有比操作系统线程更少的开销。每个 goroutine 只需少量的内存&#xff08;大约 2KB&#xff09;&#xff0c;并且由 Go 运行时负责调度和管理,哪怕是java发…

哈希表与统计——594、350、554、609、454(2简3中)

594. 最长和谐子序列&#xff08;简单&#xff09; 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在&#xff0c;给你一个整数数组 nums &#xff0c;请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列&a…

华大HC32F460移植FreeRTOS

参考&#xff1a; 关于MCU M4内核移植FreeRTOS的笔记 主要参考这位大佬的&#xff0c;照做就行了&#xff0c;用的也是IAR HC32F460 freeRTOS移植 这位是用Keil的 MCU&#xff1a;华大HC32F460 库版本&#xff1a;hc32f460_ddl_Rev2.2.0 IDE&#xff1a; IAR FreeRTOS版本&…

【多线程】概述

进程与线程 概述 一个正在运行过程中的程序&#xff0c;就是一个进程&#xff0c;也称一个任务。进程是一个重要的软件资源&#xff0c;是由操作系统内核管理和组织的。 并行&#xff1a;微观上同一个时刻&#xff0c;两个核心上的进程&#xff0c;就是同时进行的。 并发&…