大屏数据可视化——屏幕适配方案(多分辨率下)

2023-11-14

前言

基于现目前所做数据可视化项目的不同分辨率兼容需求总结以下适配几种方案供参考。 通常而言数字大屏指的是1920*1080分辨率下的电视大屏,用于图表化的展示关键数据,然而项目大部分是在笔记本上运行,演示,测试,所以不得不把小屏笔记本纳入兼容范围。。。

一、一些前提概念

1.1 常见大屏分辨率

  • 1366 * 768 : 普通液晶显示器
  • 1920 * 1080: 高清液晶显示器
  • 2560 * 1440: 2K高清显示器
  • 4096 * 2160: 4K高清显示器
  • 1280 * 720: 笔记本(1920*1080分辨率下系统默认推荐150%缩放比产生的尺寸。。。。)

1.2 设备像素

  • viewport: 视窗=浏览器窗口的宽高
  • 物理像素(设备像素): 屏幕显示分辨率像素,每个像素可以根据操作系统设置自己的颜色 和亮度
  • 设备独立像素(dip):密度无关像素,可以认为是计算机坐标系统中的一个点,可用于区分视网膜设备还是非视网膜设备
  • css像素(DIPs): 主要用在浏览器上,一般情况下,css像素称为与设备无关的像素
  • 屏幕密度: 设备表面上存在的像素数量(PPI)
  • 设备像素比(dpr): 定义了物理像素和设备独立像素的对应关系,设备像素比=物理像素/设备独立像素

二、适配痛点

  1. 设计稿按照1920*1080的分辨率,16:9的比例设计, 实际开发中,document窗口不足16:9(高度减掉顶部tab及导航栏,地址栏等)
  2. 不同分辨率:实际应用场景中,显示场景不同,不能固定写死px单位
  3. 不同比例:不同的显示器宽高比与设计稿不一致
  4. 由于大屏数据可视化项目通常用于放在电视或广告屏上展示用,而不允许出现滚动条

三、关于rem

熟悉移动端的自适应方案的朋友对 rem 适应方案,肯定不陌生,最出名的就是阿里的 手淘lib-flexible 方案。

  • rem (font size of the root element), 是 css3 的引入的一个大小单位。即相对于根元素的 font-size 值的大小。所谓根元素在网页里一般就是 html.
  • 举例如下:
html{
	font-size:20px;
}  
test1 {
  width: 1.4rem; //1.4 × 20px = 28px
}
test2 {
  height: 2.4rem; //2.4 × 20px = 48px
}

  • 通常如果应用场景只涉及16:9比例下,1920*1080分辨率屏幕的话,使用rem来自动计算即可实现不同大小屏幕的适配

四、关于px2rem

在采用rem作为适配方案时,避免不了将设计稿中的px单位转化为rem单位,开发过程中如果每个值都手动计算免不了麻烦,通常作法:

  • 使用scss或less 函数进行计算
  • webpack结合postcss-px2rem自动计算
  • postcss 一种对css编译的工具,类似babel对js的处理,通过它的插件生态来实现各种功能转换,如:autoprefixer(. 自动补全浏览器前缀), px2rem(自动将px转换为rem)
    这里对px2rem配置说明如下:
  • postcss-plugin-px2rem: 作为postcss的经典插件之一,用于自动转换px为rem postcss-px2rem文档
  1. 安装依赖:
npm i postcss-plugin-px2rem  -D
  1. 配置vue.config.js
css: {
      loaderOptions: {
          postcss: {
              plugins: [
                  require('postcss-plugin-px2rem')({
                       rootValue: 100, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
                      unitPrecision: 5, //允许REM单位增长到的十进制数字。
                      propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
                      propBlackList: [], //黑名单
                      exclude: /(node_module)/,  //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
                      selectorBlackList: [], //要忽略并保留为px的选择器
                      ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
                      replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
                      mediaQuery: false,  //(布尔值)允许在媒体查询中转换px。
                      minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
                  }),
              ]
          }
      }
  },

五、适配方案

5.1 rem自适应缩放

问题1:比例不是16:9的问题?

  • 当屏幕比16:9 宽时,两侧留白
  • 当屏幕比16:9 高时,上下留白【这种少见】

通常做法:

我们将pc宽度 screenWidth 分为10等份,其中1等分的值作为html的font-size值,以1920*1080分辨率为基准设置px2rem的rootValue则为192。这种方式有如下2个特点:

  • 所有长度的比例必然和设计图一致。
  • 实际的显示长度完全由 html 的 font-size 值决定(线性关系)

问题2:以上的做法,在16:9的内容窗口中可以做到适配,但当窗口不是16:9时就会出现滚动条,于是我们针对问题1的做法则是当非16:9时,根据超出比例的那一边,对rem对应fontSize进行缩放,

  • 1.1 具体如下

    1. 设:设计稿上有任一1条线: A, A 的长度为 x ,计算 rem 值的基准为z,那么 css 里,A 的长度表示为 x z ( r e m ) \frac{x}{z}(rem) zx(rem)
    2. 设: 网页在不同分辨率下运行时html的font-size值为 F s F_s Fs
    3. 那么 A 的实际显示长度就分为: x F s z ( p x ) \frac{xF_s}{z}(px) zxFs(px)
    • 对于任意一条线,其x, z是固定的值,因而其长度根据页面运行时网页html的font-size大小而线性变化, 如在1920的设计宽度下,长100px的线,设计算rem的基准值是192(宽除以10),那么在1366分辨率下html的root-size为136.6, 则100px的线实际长度为100*136.6 / 192 (px)
  • 1.2 进一步
    1. 取计算rem值的基准是设计稿宽度的 1/q,假设设计稿宽度为ax, 高度为ay, 则计算rem的基准值z a x q \frac{ax}{q} qax
    2. 按上面公式可以得出浏览器中画布实际的宽,高分别为:
    宽 度 : a x F s a x q = F s q 宽度: \frac{axF_s}{\frac{ax}{q}} = F_sq qaxaxFs=Fsq
    高 度 : a y F s a x q = q y F s x 高度: \frac{ayF_s}{\frac{ax}{q}} = \frac{qyF_s}{x} qaxayFs=xqyFs
    3. 浏览器窗口的宽度 w 要等于画布实际的宽度,即
    w = F s q 由 此 推 导 F s = w q w=F_sq 由此推导 F_s = \frac{w}{q} w=FsqFs=qw

  • 1.3 再进一步: 不同宽高比下如何设置Fs值?

    1. 以常见的在浏览器窗口中举例,浏览器中画布宽度ax与设计稿一致,而高度比设计高度小,这时我们需要将高度调整为浏览器高度,而又严格按照设计稿的宽高比来进行,那么
    2. 设浏览器document高度为h , 设缩小比例为S, 则根据1.2中2的公式得出, h = q y F s x S h=\frac{qyF_s}{x}S h=xqyFsS S = x h q y F s S=\frac{xh}{qyF_s} S=qyFsxh
    3. 1.3中3的公式中得出Fs的值,代入以上公式可知
      S = x h y w 即 : S = 设 计 稿 长 宽 比 实 际 长 宽 比 S = \frac{xh}{yw} 即:S= \frac{设计稿长宽比}{实际长宽比} S=ywxhS=稿
  • *综上:假设设计稿为1920*1080其计算rem的基准值为192px (默认取宽度10等分),浏览器实际窗口为1920 * 937时rem的基准值则为 192*S,即最终html的fontSize值为166.57px

最终方案:

  • index.html
;(function (designWidth, minWidth) {
  let docEle = document.documentElement
  let screenRatioByDesign = 16/9
  function setHtmlFontSize() {
    var screenRatio = docEle.clientWidth / docEle.clientHeight;
    var fontSize = (
      screenRatio > screenRatioByDesign
        ? (screenRatioByDesign / screenRatio)
        : 1
    ) * docEle.clientWidth / 10;

    docEle.style.fontSize = fontSize.toFixed(3) + "px";
  }

  setHtmlFontSize()

  window.addEventListener('resize', setHtmlFontSize)

})(1920, 1024);
  • vue.config.js 设置
module.exports = {
	// ...
	css: {
	    loaderOptions: {
	      postcss: {
	        plugins: [
	           require('postcss-plugin-px2rem')({
		            rootValue: 192, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
		            unitPrecision: 5, //允许REM单位增长到的十进制数字。
		            //propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
		            // propBlackList: [], //黑名单
		            exclude: /(node_module)/,  //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
		            // selectorBlackList: [], //要忽略并保留为px的选择器
		            // ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
		            replace: false, // (布尔值)替换包含REM的规则,而不是添加回退。
		            mediaQuery: false,  //(布尔值)允许在媒体查询中转换px。
		            minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
		          }),
	        ]
	      }
	    }
	  },
}

5.2 css3缩放scale

rem的方案对于1920及以上分辨率屏幕来说基本适用,但当切换到1366*768等小分辨率时,由于浏览器默认最小字体为12px,所以会导致文字比理想效果更多大, 而echarts生成的canvas图中单位是以固定px写死的,也会出现超出画布的问题,因此衍生第二种方案: scale缩放

  • 思路:浏览器body设置为设计稿宽高即1920*1080, 动态根据实际宽高对body的width,height进行缩放,从而实现内容缩放
  1. body固定宽高:
body{
	width: 1920px;
	height: 1080px;
}
  1. 动态获取实际文档宽高并设置body缩放系数
// index.html
;(function(win){
  var bodyStyle = document.createElement('style')
  bodyStyle.innerHTML=`body{width:1920px; height:1080px!important;}`
  document.documentElement.firstElementChild.appendChild(bodyStyle)

  function refreshScale(){
    let docWidth = document.documentElement.clientWidth;
    let docHeight = document.documentElement.clientHeight;
    var designWidth = 1920,
        designHeight = 1080,
        widthRatio = docWidth / designWidth,
        heightRatio = docHeight / designHeight;
     document.body.style = `transform:scale(${widthRatio},${heightRatio});transform-origin:left top;`;
   // 应对浏览器全屏切换前后窗口因短暂滚动条问题出现未占满情况
    setTimeout(function(){
      var lateWidth= document.documentElement.clientWidth,
        lateHeight = document.documentElement.clientHeight;
      if(lateWidth===docWidth) return;

      widthRatio = lateWidth/ designWidth
      heightRatio = lateHeight/ designHeight
      document.body.style = "transform:scale(" + widthRatio + "," + heightRatio + ");transform-origin:left top;"
    },0)
  }
  refreshScale()

  win.addEventListener("pageshow", function (e) {
    if (e.persisted) { // 浏览器后退的时候重新计算
      refreshScale()
    }
  }, false);
  win.addEventListener("resize", refreshScale, false);
})(window)
      
  1. 经过如上设置后,在项目中直接使用设计稿中px单位进行开发即可,当然这也有一个弊端,在非设计稿比例(16:9)下,界面会被压缩,但它的优势在于会对body内所有元素进行缩放,从而不会让echarts图表超出画布

六、demo演示

以下demo均在浏览器窗口下展示(即非16:9情况下绘制设计16:9图稿)

6.1 1366*768分辨率下大屏 rem适配方案

在1366*768下采用rem方案能够基本适配不出现内容超出的情况(内容少时)
在这里插入图片描述

6.2 1920*1080缩放150%的情况下rem方案

在1920*1080分辨率系统缩放到150%时,可以看到此时rem方案已经有缺陷,canvas内图表超出,界面字体未达到设计稿缩放效果
在这里插入图片描述

6.3 1920*1080分辨率150%缩放下scale方案效果

采用scale方案,字体不受浏览器最小字体限制,可以自由绽放到该分辨率下对应比例
在这里插入图片描述

七、更新

由于在非16:9的情况下,默认效果是保证比例的前提下,居中两边留白,这种一些需求方觉得不好,特别是在只出了16:9的设计稿情况下,需要适配到另一个公司64:27(分辨率7680*3240)这种大屏而且要求要铺满不变形。。。
新痛点:

  • UI提出在非16:9的情况下,图形不能被压缩(扁了)
  • 客户提出在64:27这种宽屏下,两边不能留白太空

最后想出一个最小改动的解决方案,如下先看效果:

  • 未优化前7680*3240 (比例64:27的宽屏)

    • 两侧留白,但由于屏幕比16:9宽太多,导致留白特别多
      在这里插入图片描述
  • 铺满后
    在这里插入图片描述

  • 最终解决方案

    • 设置宽度为浏览器宽度(默认Vue项目)
 function refreshScale(){
     let baseWidth = document.documentElement.clientWidth;
     let baseHeight = document.documentElement.clientHeight;
     let appStyle = document.getElementById('app').style;
     let realRatio = baseWidth/baseHeight
     let designRatio = 16/9
     let scaleRate =  baseWidth/1920
     if(realRatio>designRatio){
       scaleRate = baseHeight/1080
     }
     appStyle.transformOrigin = 'left top';
     appStyle.transform=`scale(${scaleRate}) translateX(-50%)`;
     appStyle.width = `${baseWidth/scaleRate}px`
}
  • demo代码地址
    • 说明
      1. 本demo基于vue的一套简单代码,
      2. 目前可适配到1280*720分辨率。
      3. 项目基于vue-cli3搭建,可作为项目模板进行二次开发。
      4. 基于echarts封装了基础图表组件
      5. 引入了滚动表格组件vue-seamless-scroll
      6. 适配代码在assets/js/util
    • clone地址: https://gitee.com/cy-edu/cli-template-dataV.git
    • 仓库地址:https://gitee.com/cy-edu/cli-template-dataV
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大屏数据可视化——屏幕适配方案(多分辨率下) 的相关文章

  • 在Myeclipse的web项目中使用echarts做数据可视化

    在线定制一个echarts https www echartsjs com zh builder html 下载放入项目目录 若出现报错则 选中当前工程 properties MyEclipse validation Excluded Re
  • 医学图像2D/3D可视化 ITK-SNAP软件使用

    软件下载链接 ITK SNAP Home 1 导入医学图像 nii gz文件 File gt Open Main Image 点击 Browse 切记不能有中文路径 gt Next 2 载入相应的分割图数据 nii gz文件 Segment
  • 用 Python 基于 pyecharts 对微信好友(性别,地域)进行分析,并数据可视化

    代码我是在anaconda的jupyter notebook里编写运行的 需要安装的库 在cmd里安装 pip install wxpy pip nstall pyecharts wxpy 在 itchat 的基础上 通过大量接口优化提升了
  • Streamlit项目: 轻松搭建部署个人博客网站

    文章目录 1 前言 1 1 探索 Streamlit 轻松创建交互式应用 1 2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线 2 1 一个集成了智能中医舌诊 中e诊专栏的博客网站 2 2 前期准备 2 3 使用 Stre
  • idea中如何创建xml文件

    本人做java开发程序员已经三年多了 从进入企业至今一直使用idea 对此开发工具还算了解 本人使用的版本 我是一个比较守旧的人 在2020年的今天还是依然使用2017年的版本 还请光大网友见谅哈 今天想说的就是如何在idea中创建 xml
  • 传统制造型企业如何实现数字化转型?

    传统制造企业可以通过采用技术和数据驱动的方法来实现数字化转型 以改善运营 提高效率并在快速发展的行业中保持竞争力 以下是他们可以遵循的步骤和策略 1 评估和战略制定 评估当前状态 首先评估制造流程 技术基础设施和数据管理系统的当前状态 确定
  • 人脸识别解决方案全套文件大合集,120份全新精选,有这个就够了

    人脸识别解决方案全套文件大合集 120份全新精选 有这个就够了 一 人脸识别4个特点 二 人脸识别的 4 个步骤 三 人脸识别的 5 个难点 四 人脸识别算法的发展轨迹 五 人脸识别的典型应用 六 下载人脸识别全套解决方案 一 人脸识别4个
  • Echarts的tooltip显示自定义格式化解决方案

    前言 今天甲方爸爸提出了要求 需要把图表显示的数据保留百分数的小数点后一位 实际上这个显示的问题之前在后台处理数据的时候就处理过 当时是没有保留小数的 后来要求保留小数点后一位就在后台处理了 谁知道 在前台展示的时候 莫名的出现小数点后十几
  • Eclipse打开时出现failed to create the java virtual machine...

    一 问题分析 关于Eclipse出现failed to create the java virtual machine 等情况 1 重装系统之后会发现eclipse很意外的打不开 2 有时候Eclipse使用的时间过长 3 以上情况都会出现
  • Python之数据分析(三维立体图像、极坐标系、半对数坐标)

    文章目录 写在前面 一 三维立体图像 1 三维线框 2 三维曲面 3 三维散点 二 极坐标系 三 半对数坐标 写在前面 import numpy as np import matplotlib pylab as mp 因此文章中的np就代表
  • Anaconda3安装PyEcharts包后无法正常调用

    最近在研究数据可视化问题 然后得知了Python的PyEcharts包库 使用pip install pyecharts 命令安装显示成功 但是在Spyder中输入from pyecharts import Bar 显示无法import b
  • 一个参数一张Excel表,玩转Pandas的read_excel()表格读取

    作者 黄伟呢 来源 数据分析与统计学之美 我觉得很有必要讲述这个文章 进行数据处理的第一步就是Python数据读取 但是你可能没想到 在进行数据读取的同时 我们其实可以配合相关参数做很多事儿 这对于后续的数据处理都是极其有帮助 read e
  • echarts修改折线图样式,总结踩坑以及常用

    以折线图为例 最终呈现的效果是这样的 在最外层可以设置 距离外层box的距离 myChart setOption grid 距离外层box左右位置 x 30 左 y 45 上 x2 45 右 y2 40 下 borderWidth 1 在x
  • 查看数据库表所占容量空间大小

    一 查看所有数据库容量大小 二 查看所有数据库各表容量大小 三 查看指定数据库容量大小 四 查看指定数据库各表容量大小 五 查看指定数据库指定表容量大小 数据库情况 一 查看所有数据库容量大小 SELECT table schema AS
  • 【工具】使用npx一行命令就能压缩js文件

    有的时候要想压缩单个js文件 如果用webpack和gulp可能要配置一些东西 而用npx就可以帮我们一行命令就简单压缩js文件 1 只压缩js文件 npx uglify js main js o main min js 压缩后的新文件如下
  • 今天我花一个通宵的时间安装Windows11系统居然失败,忍不住哭了!

    个人主页 极客小俊 作者简介 web开发者 设计师 技术分享博主 希望大家多多支持一下 我们一起进步 如果文章对你有帮助的话 欢迎评论 点赞 收藏 加关注 我们就不要废话了 直接上主题吧 Windows11 系统安装 提示此电脑无法运行完美
  • Python pyecharts数据可视化

    Python pyecharts数据可视化 绘制精美图表 一 数据可视化 1 pyecharts介绍 2 初入了解 1 快速上手 2 简单的配置项介绍 3 案例实战 1 柱状图Bar 2 地图Map 省份 城市 地区 3 饼图Pie Pie
  • 如何才能避免辛苦开发出来的产品惨遭市场冷遇?

    精益创新与传统创新模式的主要区别 1 传统的火箭发射式创新 认为用户需求和解决方案都是可以预知的 且可以准确把握的 直到产品成型的那一刻才面向用户 2 精益创新 认为用户痛点和解决方案在本质上都是未知的 无法完美预测的 需要通过不断地验证与
  • 大数据分析毕设之基于python的电影知识图谱可视化系统

    S2023002大数据分析毕设之基于python的电影知识图谱可视化系统 https www bilibili com video BV12N4y1A72J share source copy web vd source 3d18b0a7b
  • Android Uri scheme协议file转content

    一 Uri的介绍 在Android开发中 Uri Uniform Resource Identifier 是用于标识和访问各种资源的核心概念 这些资源可能包括文件 网络URL 数据库记录等 在处理这些资源时 我们可能会遇到不同的Uri协议

随机推荐

  • 如何在visio2010的框图中插入公式?

    如何在visio2010的框图中插入公式 其实很简单 也没必要下载Mathtype 先在world中用自带的公式编辑器将公式写好 如下图 此时选中公式 博文已经迁移到个人主页https guangmujun cn archives 143
  • SpringAOP+自定义注解模拟shiro框架实现

    一 概念 权限管理就是管理用户对于资源的操作 本 CRM 系统的权限 也称作资源 是基于角色操作权限来实现的 即RBAC Role Based Access Control 基于角色的访问控制 就是用户通过角色与权限进行关联 简单地说 一个
  • iOSWebview与js交互之调整字体大小

    先看效果图 iOS开发经常会跟Webview交互 主要调用的就是stringByEvaluatingJavaScriptFromString这个方法 也可以在 BOOL webView UIWebView webView shouldSta
  • NAT网关和NAT穿越原理

    转自 https blog csdn net chance yin article details 37913963 一 原理图 1 背景信息 1 我们模拟的情形是位于网络A下的内网主机UserA 想要和位于网络B下的内网主机UserB进行
  • 网页HTML5制作flex布局骰子,CSS3的Flexbox骰子布局的实现及分析

    这篇文章主要介绍了关于CSS3的Flexbox骰子布局的实现及分析 有着一定的参考价值 现在分享给大家 有需要的朋友可以参考一下 骰子布局顾名思义 就是好比骰子的一面最多可以放置9个点 而每个面放置的点数正好就是一个布局的模型图 这里我们就
  • 网站漏洞怎么修复代码漏洞

    jeecms 最近被爆出高危网站漏洞 可以导致网站被上传webshell木马文件 受影响的版本是jeecms V6 0版本到jeecmsV7 0版本 该网站系统采用的是JAVA语言开发 数据库使用的是oracle mysql sql数据库
  • python 类self详解

    class Box object def init this boxname size color this boxname boxname this size size this color color self就是用于存储对象属性的集合
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • C/C++ 头文件路径在编译时及工具中的设置

    使用 C CPP 避免不了要和各种头文件打交道 系统库还好 基本上不需要操心 已经被自动预置入头文件列表中了 棘手的是使用第三方库 这时就要手动指定其头文件位置与库文件位置 本文记录下在终端中手工编译与某些工具内编译的设置方式 终端中使用
  • arm 堆栈

    先转一篇 stm32 堆和栈 stm32 Heap Stack worldsing笔记 stm32堆栈 slj win的博客 CSDN博客 关于堆和栈已经是程序员的一个月经话题 大部分有是基于os层来聊的 那么 在赤裸裸的单片机下的堆和栈是
  • 根据印刷行业的特点,整理出MES管理系统解决方案

    印刷行业中 与ERP管理系统相关的功能模块主要包含销售预测 生产计划 物料需求等 作为ERP系统的下层信息系统 MES生产执行系统的计划执行来源于上层ERP系统中的生产订单 并在MES生产执行系统中生成生产任务单 然后分配到相应的生产车间
  • 未能连接服务器1004,FAILURE:Error Domain = NSURLErrorDomain Code = -1004"无法连接到服务器。"...

    在此之前 我想列出我已阅读的帖子并尝试实施答案 避免重复 我正在开发SDK 我已经创建了一些UI测试 我试图不连接到后端系统并通过在测试时在本地机器上运行的存根服务器来模拟它们 所有请求都必须转到此服务器 我创建了一个永远不会提交到App
  • 微信AR教程|鼓浪屿趣味地图

    KIVICUBE教程 鼓浪屿WebAR趣味地图 01 场景构想 首先需要注册kivicube账号 kivicube是一个WebXR在线制作工具 帮助用户通过在线可视化编辑即可快速制作AR场景 并可一键发布至web与微信小程序两个端口 通过微
  • 【hello C++】类和对象(下)

    目录 1 再谈构造函数 1 1 构造函数体赋值 1 2 初始化列表 1 3 explicit关键字 2 static成员 2 1 概念 2 2 特性 3 友元 3 1 友元函数 3 2 友元类 4 内部类 5 匿名对象 6 拷贝对象时的一些
  • 用sort 对结构体排序

    思路 先定义一个你想要的结构体 然后再自定义一个cmp函数 根据需要来进行大小比较的判断 最后在main函数中通过sort xxx xxx n cmp 来进行判断即可 实例 struct people string name string
  • 【硬件架构的艺术】学习笔记(1)亚稳态的世界

    目录 1 亚稳态 1 1 什么是亚稳态 1 2 亚稳态窗口 1 3 避免亚稳态 1 3 1 使用多级同步器 1 3 2 使用时钟倍频电路的多级同步器 1 4 亚稳态测试电路 1 5 同步器的类型 1 6 亚稳态综合性建议 1 亚稳态 1 1
  • docker教程:从头基于空镜像scratch创建一个新的Docker镜像

    从头基于空镜像scratch创建一个新的Docker镜像 我们在使用dockerfile构建镜像时 一种方式是使用预制镜像 这样可以省很多工作量 但问题是镜像会变得特别大 尤其是安装一些应用程序所需的依赖后 镜像的尺寸会更大 如果我们的需求
  • Unity常用旋转API

    Unity中的旋转通常可以用Transform 直接控制和 rotation 控制两种方式 一 Transform控制 工程中的scene1 1 1 Transform Rotate 旋转某个角度 函数定义 csharp view plai
  • python turtle代码示例-Python turtle.left方法代码示例

    本文整理汇总了Python中turtle left方法的典型用法代码示例 如果您正苦于以下问题 Python turtle left方法的具体用法 Python turtle left怎么用 Python turtle left使用的例子
  • 大屏数据可视化——屏幕适配方案(多分辨率下)

    文章目录 前言 一 一些前提概念 1 1 常见大屏分辨率 1 2 设备像素 二 适配痛点 三 关于rem 四 关于px2rem 五 适配方案 5 1 rem自适应缩放 5 2 css3缩放scale 六 demo演示 6 1 1366 76