关于可视化大屏适配

这篇具有很好参考价值的文章主要介绍了关于可视化大屏适配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、目前市场上适配方案有两种;

  • vw、vh方案:

原理:按照设计稿的尺寸,将px按比例计算转为vw和vh;

优点:不会存在失真情况、可以动态计算图表的宽高,字体等,灵活性较高,当屏幕比例跟 ui 稿不一致时,不会出现两边留白情况;

缺点:类似第三方echart图表都需要单独做字体、间距、位移的适配,比较麻烦

核心代码以sass为例

/*util.scss*/
@use 'sass:math';
//默认设计稿的宽度
$designWidth: 1920;
//默认设计稿的高度
$designHeight: 1080;

//px转为vw的函数
@function vw($px) {
  @return math.div($px, $designWidth) * 100vw;
}

//px转为vh的函数
@function vh($px) {
  @return math.div($px, $designHeight) * 100vh;
}

然后页面中引入util.scss、将20px更换为vh(20)

@import '@/assets/style/util.scss';
 .dateText {
   padding-top: vh(20);
  }
 .weatherText {
    padding-top: vh(32);
  }

在js中使用到尺寸可以用下面这个工具方法去做转换

const styleUtil = {
  // px转vw
  px2vw: function (_px, unit) {
    if (unit) {
      return (_px * 100.0) / designWidth + unit;
    }
    return (_px * 100.0) / designWidth + 'vw';
  },
  // px转vh
  px2vh: function (_px, unit) {
    if (unit) {
      return (_px * 100.0) / designHeight + unit;
    }
    return (_px * 100.0) / designHeight + 'vh';
  },
};

chart 图表中的适配用以下方法、需要注意的是、在resize的时候、让echart也resize一下

const fitChartSize = (size, defaultHeight = 1080) => {
  // 默认宽高问设计
  let clientHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
  console.log('clientHeight::: ', clientHeight);
  if (!clientHeight) return size;

  let scale = clientHeight / defaultHeight;
  return Number((size * scale).toFixed(3));
};
  • 缩放方案

原理:按照设计稿的尺寸布局,采用等比例缩放、在不同屏幕尺寸中将其通过放大缩小最外层的dom为一定比例、来保持原本布局;

优点:代码量少,适配简单 、一次处理后不需要在各个图表中再去单独适配;

缺点:如果缩放比例超过一定程度,字体图片等就会失真、会留白


核心代码

  const usePreviewFitScale = (width, height, scaleDom, callback) => {
  // * 画布尺寸(px)
  const baseWidth = width;
  const baseHeight = height;

  // * 默认缩放值
  const scale = {
    width: 1,
    height: 1,
  };

  // * 需保持的比例
  const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5));
  const calcRate = () => {
    // 当前屏幕宽高比
    const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5));

    if (scaleDom) {
      if (currentRate > baseProportion) {
        // 表示更宽 以高度为基准 需要保持比例的宽
        scale.width = parseFloat(((window.innerHeight * baseProportion) / baseWidth).toFixed(5));
        scale.height = parseFloat((window.innerHeight / baseHeight).toFixed(5));
        const offsetW = ((window.innerWidth - window.innerHeight * baseProportion) / 2).toFixed(5);
        scaleDom.style.transform = `translateX(${offsetW}px) scale(${scale.width}, ${scale.height})`;
      } else {
        // 表示更高 以宽度为基准 需要保持比例的高
        scale.width = parseFloat((window.innerWidth / baseWidth).toFixed(5));
        scale.height = parseFloat((window.innerWidth / baseProportion / baseHeight).toFixed(5));
        scaleDom.style.transform = `translateX(0px) scale(${scale.width}, ${scale.height})`;
      }
      if (callback) callback(scale);
    }
  };

  const resize = throttle(() => {
    calcRate();
  }, 200);

  // * 改变窗口大小重新绘制
  const windowResize = () => {
    window.addEventListener('resize', resize);
  };

  // * 卸载监听
  const unWindowResize = () => {
    window.removeEventListener('resize', resize);
  };

  return {
    calcRate,
    windowResize,
    unWindowResize,
  };
};

  • 至于还有流传rem + vw vh的方案(我是直接舍弃的)

这个rem的方案是根据单个宽度来计算的,只能适配宽度缩放、而大屏是一屏展示、而且在类似echart图表中,还需要做vw vh的单独适配、也是直接舍弃

  • 有的同学还说有设计外层盒子百分比、盒子内部图表大小固定;

这种方式怎么说呢,那就得UI配合给我们设计出对应的样式、而且这种不用动脑子想也是很丑啊、还是直接pass吧、大屏本身就是要做的好看

二、我们先搞清楚可视化大屏适配与传统后台管理系统适配的区别

  • 后台管理系统适配: 只适配宽、当宽超出则换行展示、类似的layout组件、Row组件、flex布局的都是采用只适配宽的方式、而且内部尺寸大小固定;

  • 可视化大屏适配:宽高都需适配、而且没有滚动条、一屏展示;

三、当然不管采用那种方式我们都要一客户需求基点、然后分析出对应的解决方式

1、 嵌入管理系统内部展示: 多数情况以非全屏展示

这种情况如果使用缩放形式、其实也可以、那得需要UI出图为实际空间占比的UI、否则当我们写完代码,因为底部程序坞和浏览器窗口操作栏的高度,导致缩放比大、就会凸显失真情况的产生,而且有留白

一般情况UI给的图就是1920*1080的尺寸比、当然如果客户要求不高、采用这种方式当然是最省事;

但如果客户要求高、还是老老实实的使用vw、vh

2、纯全屏显示:多数情况给定尺寸为大屏尺寸、全屏展示、不考虑程序坞、浏览器上方操作栏;

这种场景呢,就比较适合缩放、因为一般适配屏幕大小不会差太多、没有很多情况、即使失真、多数也在客户考虑范围之内;

因为vw vh方式,如果是正常布局的vw、vh和echart 高度比计算得出来的尺寸位置,可能会存在对不齐的情况、当然具体情况具体分析;文章来源地址https://www.toymoban.com/news/detail-852727.html

到了这里,关于关于可视化大屏适配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3 +Echarts5 可视化大屏——屏幕适配

    项目基于Vue3 + Echarts5 开发,屏幕适配是使用 scale 方案 Echarts组件按需引入,减少打包体积 地图组件封装(全国省份地图按需加载) 效果图: 大屏适配常用的方案有 rem + vw/vh 和 scale 。 rem + vw/vh 方案 结合使用rem(相对于根元素字体大小的单位)和vw/vh(视窗宽度/高度的单位

    2024年02月15日
    浏览(36)
  • 基于HTML+CSS+Echarts大屏数据可视化集合共99套

    基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求可视化集合。 Java+Swing实现学生选课管理系统 Java+Swing实现学校教务管理系统 Java+Swing+sqlserver学生成绩管理系统 Java+Swing用户信息管理系统 Java+Swing实现的五子棋游戏 基于JavaSwing 银行管理系统

    2024年02月12日
    浏览(30)
  • 【python可视化大屏】使用python实现可拖拽数据可视化大屏

    我在前几期分享了关于爬取weibo评论的爬虫,同时也分享了如何去进行数据可视化的操作。但是之前的可视化都是单独的,没有办法在一个界面上展示的。这样一来呢,大家在看的时候其实是很不方便的,就是没有办法一目了然的看到数据的规律。为了解决这个问题我使用p

    2024年02月03日
    浏览(41)
  • 【Python可视化大屏】全流程讲解pyecharts拖拽可视化大屏的背后原理

    目录 一、设计方案 二、项目背景 三、电影爬虫 3.1 导入库 3.2 发送请求 3.3 解析页面 3.4 存储到csv 四、数据持久化存储 4.1 导入库 4.2 存入MySQL 4.3 讲解视频 五、开发可视化大屏 5.1 柱形图 5.2 饼图 5.3 词云图 5.4 数据表格 5.5 涟漪散点图 5.6 条形图 5.7 大标题 5.8 Page组合 六、彩蛋

    2024年02月04日
    浏览(62)
  • 【11个适合毕设的Python可视化大屏】用pyecharts开发拖拽式可视化数据大屏

    你好,我是@马哥python说,一枚10年程序猿。 以下是我近期用Python开发的原创可视化数据分析大屏,非常适合毕设用,下面逐一展示:(以下是截图,实际上有动态交互效果哦) 以下大屏均为@马哥python说的个人原创,请勿转载。 以上大屏的开发技术流程如下: 1、爬虫采用

    2024年02月03日
    浏览(54)
  • 智慧园区物业可视化大屏

    随着万物互联、数字信息时代的到来,也给物业园区管理行业带来变革性影响。 园区作为城市的基本组成单元,是人口和产业的重要聚集区,现已逐渐成为中国经济转型升级和创新发展的主力。 智慧园区物业可视化整合园区现有信息系统的数据资源,融合人工智能、物联网

    2024年02月08日
    浏览(34)
  • vue可视化大屏教程

      在我们日常生活中,经常会看到各式各样的大屏,其中有一部分是传统的数据大屏,如工业监控大屏、环保监测大屏等。这些大屏的主要作用是展示信息,让用户快速获取信息,避免用户在阅读时产生视觉疲劳。还有一部分是智能的可视化数据大屏,如智能家居、智慧城市

    2024年02月07日
    浏览(46)
  • 前端可视化数据大屏(1)

    效果图 技术架构:datav,vue2,echarts 我们一步一步的来实现一个简单的可视化数据大屏,开始吧!!         太简单了,百度上可以搜索,我这里就不多说了,把router装好就行         2.1在控制台上输入命令下载datav         2.2 将datav的组件注册为全局组件              

    2024年02月06日
    浏览(39)
  • Echarts实现可视化大屏

    手把手带你做出一个可视化大屏,轻松完成期末大作业。 关注公众号” Python爬虫与数据分析 “回复“ 可视化大屏 ”获取代码及数据 涉及到的技术:Echarts、HTML、css、JavaScript Echarts官网: https://echarts.apache.org/handbook/zh/concepts/axis/ 目录 1、echarts同时展示多幅图 2、使用css优化

    2024年02月09日
    浏览(85)
  • python基于大数据的手机分析系统与可视化 -可视化大屏分析

    前言 该系统采用了多种数据源,包括用户行为数据、社交数据、市场趋势数据等,通过数据挖掘、统计分析等手段,对这些数据进行分析和建模。其中,用户行为数据包括用户使用手机的频率、时间、地理位置、应用使用情况等,社交网络数据包括用户在交网络上的行为、好

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包