vue常用的数字孪生可视化的自适应方案

目录
  • 写在前面
  • 各自适应方案对比
    • 百分比自适应方案
    • Rem + Resize

写在前面

前面博主写过一篇文章 面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用),简述了数字孪生产品的数据更新机制,对于数字孪生产品来说,数据非常重要,孪生世界的数据呈现可以反映现实世界的真实情况,而在数据展示中,除了数据更新机制之外,还有一个非常非常重要的东西,那就是可视化表格的展现,而由于数字孪生可视化界面主要用于展示数据,因此在大部分应用场景中,它经常被放到各式各样的展示屏幕展示,可能是普通的电脑屏幕,可能是平板,也有可能是好几块屏幕组成的可视化大屏系统,那么表格的自适应便成了展示的重要衡量标准,如何完成自适应调整,将在产品体验中占据非常重要的比重!

各自适应方案对比

百分比自适应方案

按百分比实现自适应应该是最最简单的方式了,不需要额外增加如何配置,即可实现,我们来做个试验测试一下按百分比实现自适应的效果

<template>
  <div class="box">
    <div class="inner-box">
    </div>
  </div>
</template>
<style lang='scss' scope>
  .box {
    width: 100vw;
    height: 100vh;
    .inner-box {
      width: 20%;
      height: 20%;
      background: cadetblue;
    }
  }
</style>

我们先定义一个外部容器 box ,然后在 box 里创建一个用于自适应的长方形 inner-box,然后将自适应长方形宽和高都设置为20%

我们可以看到,当我们将其宽高都设置为百分比时,window 的宽、高变化时,长方形的宽和高也将随着发生变化,可以实现初步的自适应。

而当我们将这样一个自适应方案应用到数字孪生可视化界面上时,我们会发现,效果有点差强人意

通过我们模拟占位的表格可以很明显看出,当我们对窗口进行横向和竖向的缩放时,左右边的表格是进行了自适应的,而由于在这个自适应方案中宽和高并没有什么联系,导致了宽高各自自适应,最终导致了表格宽高比例严重失衡,展现得非常 ugly,所以,这个方案在数字孪生可视化这个应用场景中并不适合。

Rem + Resize

第二个方案采用的是 rem,而 rem 的原理是根据根元素 fontsize 来计算 rem 的单位长度,那么我们就可以通过监听 window 的 resize,动态修改 fontsize,进而影响 rem,最终达到自适应的效果,下面我们做个测试

// resize.js
const scaleListener = () => {
  window.addEventListener('resize', resize)
  console.log('scaleListening......')
}
const resize = () => {
  // 与原来 1080 的比值
  let scale = window.innerHeight / 1080
  document.documentElement.style.fontSize = `${16 * scale}px`
  console.log('resize')
}
export {
  scaleListener
}
// APP.vue
<script>
import { scaleListener } from '../src/components/resize/resize';
export default {
  mounted() {
    scaleListener()
  },
}
</script>

首先我们定义了一个 resize 函数用于启动监听 window 的resize 事件,当 window 发生 resize 时,通过与事先定义的标准屏幕高度 1080 对比,计算比值,更新事先定义的标准 fontsize 16px。

这个时候,当我们在组件中使用 rem 作为单位时,随着 window 的 resize,rem 将被重置,元素也将被重置,值得注意的是,这个时候,由于表格的宽高采用的都是 rem ,因此在触发 resize 时,表格的宽高比例不会发生变化,也就达到了数字孪生可视化产品所应具有的自适应标准了

可能大家会有疑问,为啥是监听 height 而不是 width,主要的原因是数字孪生可视化界面一般表格都处于左右两边,宽度变化对于表格并不会造成大的影响,只要表格做到靠左、靠右显示即可,而高度才是影响表格的重要因素,当高度变化时,表格如果不进行缩放,表格的内容将会无法完整显示。

以上就是vue常用的数字孪生可视化的自适应方案的详细内容,更多关于vue数字孪生可视化自适应的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue发送websocket请求和http post请求的实例代码

    先给大家介绍下vue发送websocket请求和http post请求 直接上代码: pdf.vue <script> import SockJS from 'sockjs-client'; import Stomp from 'stompjs'; import qs from "qs" export default { name: "pdf", data() { return { newsData: [], tagGuid_mx: "&quo

  • Websocket通信协议在数字孪生中的应用

    目录 写在前面 数字孪生中的通讯协议 Websocket 是什么 Websocket 配置 基于 Node.js 的 Websocket 服务器搭建 基于Vue 的 Websocket 客户端搭建 通过 Websocket 更新 Echart 表格数据(基于 Vue + node) 搭建 echart 柱状图结构 添加柱状图初始化参数 添加柱状图更新函数 添加 Websocket 连接与接收数据函数 向 Websocket Server 添加生成随机数据的函数 添加数据监控函数,即数据更新函数

  • 一文教你如何优雅的使用WebSocket

    目录 简介 特性 使用场景 具体实现 一.首先是服务端代码,这里我用的是nodejs. 二.然后是客户端代码 总结 简介 websocket是基于TCP的一种双向通信协议.在此之前,一直是采用轮询的方式进行双向通信,这种方式效率低下还非常浪费资源.为了解决这种问题,websocket应运而生. 特性 双向通信:websocket使得客户端跟服务端之间交换数据变得更加简单.允许服务器主动向客户端推送数据.浏览器只需要和服务器完成一次握手,就可以创建持久性的连接,并进行双向数据传输. 实时性强: 服

  • Go 实现 WebSockets之创建 WebSockets

    目录 前言 建立 HTTP 服务器 发起握手 WebSockets 的用例 总结 前言 上一篇文章Go 实现 WebSockets和什么是 WebSockets我们先介绍了什么是 WebSockets 协议.本篇文章将来介绍如何利用 Go 来实现一个 WebSockets.要基于 net/http 库编写一个简单的 WebSocket 响应服务器,我们需要: 建立握手 从客户端接收数据帧 向客户端发送数据帧 关闭握手 WebSockets 无需客户端事先请求即可从服务器传输数据,允许来回传递消息

  • 如何在CocosCreator中使用http和WebSocket

    CocosCreator版本2.3.4 一.HttpGET Get方式,客户端请求本机地址3000端口,并携带参数url和name,服务端收到后返回name参数. cocos客户端: //访问地址 let url = "http://127.0.0.1:3000/?url=123&name=321"; //新建Http let xhr = new XMLHttpRequest(); //接收数据 xhr.onreadystatechange = function () { if

  • vue常用的数字孪生可视化的自适应方案

    目录 写在前面 各自适应方案对比 百分比自适应方案 Rem + Resize 写在前面 前面博主写过一篇文章 面试官:除了 HTTP,你还用过什么通信协议?(Websocket 在数字孪生中的应用),简述了数字孪生产品的数据更新机制,对于数字孪生产品来说,数据非常重要,孪生世界的数据呈现可以反映现实世界的真实情况,而在数据展示中,除了数据更新机制之外,还有一个非常非常重要的东西,那就是可视化表格的展现,而由于数字孪生可视化界面主要用于展示数据,因此在大部分应用场景中,它经常被放到各式各样的展示屏

  • vue常用高阶函数及综合实例

    一. 常用的数组的高阶函数 假设, 现在有一个数组, 我们要对数组做如下一些列操作 找出小于100的数字: 将小于100的数字, 全部乘以2: 在2的基础上, 对所有数求和: 通常我们会怎么做呢? <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &l

  • 17个vue常用的数组方法总结与实例演示

    1. join() join(’参数‘)把数组的元素以传入的参数为分割符,转换成字符串. let arr = [1,2,3,4,5]; let str = arr.join(','); console.log(str) // -> '1,2,3,4,5'; 2.push()和pop() push(): 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度.pop():数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项. let arr = ['张三','李四

  • Vue常用的几个指令附完整案例

    越来越多的人在用Vue,刚开始接触vue的话常接触的指令就几个,统一归纳一下,做个demo演示. 指令 v-text v-html v-bind v-on v-model v-for 代码 学习技术最好还是要看下代码是什么样的. v-text 解释:更新DOM对象的 textContent <h1 v-text="msg"></h1> v-html 解释:更新DOM对象的 innerHTML <h1 v-html="msg">&l

  • vue 实现LED数字时钟效果(开箱即用)

    实现思路 每一个数字由七个元素构成,即每一个segment元素.0~9 的数字都有自己的构成方式,用数组表示,即digitSegments数组.例如: 数字0用数组表示就是[1,2,3,4,5,6],定时器每隔一秒获取最新时间,然后通过改变透明度将之前的数字消失,显示最新的数字.通过transition展示动态效果. 代码细节 setNumber 方法用来设置数字 ,方法中第一个判断用于清除之前显示的数字,第二个判断用于显示最新的数字,当初始化时间时,会进第二个判断.样式有些丑,可以自己修改,年

  • Vue常用传值方式、父传子、子传父及非父子实例分析

    本文实例讲述了Vue常用传值方式.父传子.子传父及非父子.分享给大家供大家参考,具体如下: 父组件向子组件传值是利用props 子组件中的注意事项:props:['greetMsg'],注意props后面是[]数组可以接收多个值,不是{}. 且此处的greetMsg用greet-msg会报错,记住需用驼峰法命名 非父子组件进行传值 非父子组件之间传值,需要定义个公共的公共实例文件bus.js,作为中 间仓库来传值,不然路由组件之间达不到传值的效果. import Vue from 'vue' e

  • vue常用指令代码实例总结

    vue常用内置指令 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>12_指令_内置指令</title> <style> [v-cloak] { display: none } </style> </head> <body> <!-- 常用内置指令 v

  • Vue实现input宽度随文字长度自适应操作

    业务需求,输入文字,后面的元要紧随其后,奈何input默认是有宽度,我想要达到,输入文字,动态改变input的宽度,试了很多方法,目前自己琢磨一种,有遇到问题的可以参考一下, 直接贴代码 <div class="textcontain"> <input type="text" v-model.number="item.cardComboMoney" maxlength="5" placeholder=&quo

  • Vue常用API、高级API的相关总结

    最近手痒痒,玩儿了一下Vue3.0,很舒服,赶紧把这几期Vue2.0弄完,写一些3.0的东西. 本文主要罗列和解析一些个人认为常用或有大用途的Api,作为自我总结的笔记和探讨. nextTick 功能: 添加在下次Dom更新循环结束之后的延迟回调,修改数据之后,可以获取更新后的Dom. 用法: Vue.nextTick( [callback, context] ) vm.$nextTick( [callback] ) // 用法2 // 作为一个 Promise 使用 (2.1.0 起新增) V

随机推荐