可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

这篇具有很好参考价值的文章主要介绍了可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可视化大屏适配/自适应现状

可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件、工具但是我为什么还要重复造轮子呢?因为目前市面上适配工具每一个都无法做到完美的效果,做出来的东西都差不多,最终实现效果都逃不出白边的手掌心,可以解决白边问题的,要么太过于复杂,要么会影响dom结构。

三大常用方式

  1. vw/vh方案
    1. 概述:按照设计稿的尺寸,将px按比例计算转为vw和vh
    2. 优点:可以动态计算图表的宽高,字体等,灵活性较高,当屏幕比例跟 ui 稿不一致时,不会出现两边留白情况
    3. 缺点:每个图表都需要单独做字体、间距、位移的适配,比较麻烦
  2. scale方案
    1. 概述:也是目前效果最好的一个方案
    2. 优点:代码量少,适配简单 、一次处理后不需要在各个图表中再去单独适配.
    3. 缺点:留白,据说有事件热区偏移,但是我目前没有发现有这个问题,即使是地图也没有
  3. rem + vw vh方案
    1. 概述:这名字一听就麻烦,具体方法为获得 rem 的基准值 ,动态的计算html根元素的font-size ,图表中通过 vw vh 动态计算字体、间距、位移等
    2. 优点:布局的自适应代码量少,适配简单
    3. 缺点:留白,有时图表需要单独适配字体

基于此背景,我决定要造一个简单又好用的轮子。

解决留白问题

留白问题是在使用scale时才会出现,而其他方式实现起来又复杂,效果也不算太理想,总会破坏掉原有的结构,可能使元素挤在一起,所以我们还是选择使用scale方案,不过这次要做出一点小小的改变。

常用分辨率

首先来看一下我的拯救者的分辨率:

可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定! 它可以代表从1920往下的分辨率

我们可以发现,比例分别是:1.77、1.6、1.77、1.6、1.33... 总之,没有特别夸张的宽高比。

计算补齐白边所需的px

只要没有特别夸张的宽高比,就不会出现特别宽或者特别高的白边,那么我们能不能直接将元素宽高补过去?也就是说,当屏幕右侧有白边时,我们就让宽度多出一个白边的px,当屏幕下方有白边时,我们就让高度多出一个白边的px。

很喜欢CSGO玩家的一句话:"啊?"

先想一下,如果此时按宽度比例缩放,会在下方留下白边,所以设置一下它的高度,设置多少呢?比如 scale==0.8 ,也就是说整个#app缩小了0.8倍,我们需要将高扩大多少倍才可以回到原来的大小呢?

可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

emmm.....

算数我最不在行了,启动高材生

可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

原来是八分之十,我vue烧了。

当浏览器窗口比设计稿大或者小的时候,就应该触发缩放,但是比例不一定,如果按照scale等比缩放时,宽度从1920缩小0.8倍也就是1536,而高度缩小0.8也就是743,如果此时浏览器高度过高,那么就会出现下方的白边,根据高材生所说的,缩小0.8后只需要放大八分之十就可以变回原大小,所以以现在的高度743*1.25=928,使宽度=928px就可以完全充满白边!

真的是这样吗?感觉哪里不对劲...

是浏览器高度!我忽略了浏览器高度,我可以直接使用浏览器高度乘以1.25然后再缩放达0.8!就是 1 !

也就是说 clientHeight / scale 就等于我们需要的高度!

我们用代码试一试

function keepFit(designWidth, designHeight, renderDom) {
  let clientHeight = document.documentElement.clientHeight;
  let clientWidth = document.documentElement.clientWidth;
  let scale = 1;
  if (clientWidth / clientHeight < designWidth / designHeight) {
    scale = (clientWidth / designWidth)
    document.querySelector(renderDom).style.height = `${clientHeight / scale}px`;
  } else {
    scale = (clientHeight / designHeight)
    document.querySelector(renderDom).style.width = `${clientWidth / scale}px`;
  }
  document.querySelector(renderDom).style.transform = `scale(${scale})`;
}

上面的代码可能看起来乱糟糟的,我来解释一下:

参数分别是:设计稿的宽高和你要适配的元素,在vue中可以直接传#app。

下面的if判断的是宽度固定还是高度固定,当屏幕宽高比小于设计宽高比时,

我们把高度写成 clientHeight / scale ,宽度也是同理。

最终效果

将这段代码放到App.vue的mounted运行一下

可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!

如上图所示:我们成功了,我们仅用了1 2 3 4....这么几行代码,就做到了足以媲美复杂写法的自适应!

我把这些东西封装了一个npm包:autofit.js ,开箱即用,欢迎下载!

亲手打造集成工具:autofit.js

这是一款可以使你的项目一键自适应的工具 github源码👉go

  • 从npm下载
npm i autofit.js
  • 引入
import autofit from 'autofit.js'
  • 快速开始
autofit.init()

默认参数为1920*929(即去掉浏览器头的1080), 直接在大屏启动时调用即可

  • 使用
export default {  
  mounted() {
  autofit.init({
        designHeight: 1080,
        designWidth: 1920,
        renderDom:"#app",
        resize: true
    })
  },
}

以上使用的是默认参数,可根据实际情况调整,参数分别为

   * - renderDom(可选):渲染的dom,默认是 "#app",必须使用id选择器 
   * - designWidth(可选):设计稿的宽度,默认是 1920 
   * - designHeight(可选):设计稿的高度,默认是 929 ,如果项目以全屏展示,则可以设置为1080
   * - resize(可选):是否监听resize事件,默认是 true

结语

诺克萨斯即将崛起文章来源地址https://www.toymoban.com/news/detail-422379.html

到了这里,关于可视化大屏的终极解决方案居然这么简单,vue-autofit一行全搞定!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数字孪生城市,智慧城市可视化技术解决方案案例

    近年来,数字孪生智慧城市的发展一直是人类社会的焦点话题。作为人口载体的城市给人民的生活带来了极大的便利。但与此同时,数字孪生智慧城市发展也带来了许多问题。可视化技术的迅速发展以及不合理的规划等,导致了城市人口剧增,资源短缺,环境污染,交通拥堵

    2024年02月11日
    浏览(36)
  • 智慧电网数据可视化运维云平台解决方案

    智慧电力概述 智慧电力是通过采用先进的大数据、云计算、物联网、边缘计算等技术,实现生产信息与管理信息的智慧,实现人、技术、经营目标和管理方法的集成,是企业管理思想的一个新突破。智慧电厂建设具备智能化、一体化、可观测、可互动、自学习、自寻优等九大

    2024年01月20日
    浏览(44)
  • 数字孪生智慧校园三维可视化管理系统解决方案

    随着科学技术的进步,人们对于生活的要求也越来越高。而教育也不例外。要想让学生受益于科学的进步,那么教育就必须要跟上时代的步伐。这就是“智慧校园”诞生的原因。 教育部等六部门于2021年7月印发的《关于推进教育新型基础设施建设构建高质量教育支撑体系的指

    2024年02月16日
    浏览(35)
  • 工厂企业消防安全AI可视化视频智能监管解决方案

    2023年11月20日下午6时30分许,位于江苏省无锡市惠山区前洲街道的某公司突发严重火灾,共造成7人死亡。这次火灾提醒我们工业安全至关重要,企业都应该时刻保持警惕,加强安全意识和培训,提高应对突发事件的能力,最大程度地减少火灾等意外事故的发生。 然而,企业消

    2024年02月19日
    浏览(27)
  • 如何实现数据可视化分析?有这个解决方案就够了

    在这个数据呈爆炸式增长的时代,每天都有海量数据在产生。如何通过简单的方式实现业务上的分析、计算、交互,并最终呈现出可视化的分析结果,帮助业务人员更好地理解数据的价值,将数据变现,是当前众多企业都需要面对的问题。 想要直观准确地从不同领域中的数据

    2024年02月06日
    浏览(28)
  • Vue大屏自适应终极解决方案

    v-scale-screen 是一个大屏自适应组件,在实际业务中,我们常用图表来做数据统计,数据展示,数据可视化等比较直观的方式来达到一目了然的数据查看,但在大屏开发过程中,常会因为适配不同屏幕而感到困扰,下面我们使用 v-scale-screen 来解决一下这个难题 废话不多说,先

    2024年02月12日
    浏览(37)
  • 京东开源的、高效的企业级表格可视化搭建解决方案:DripTable

    DripTable 是京东零售推出的一款用于企业级中后台的动态列表解决方案,项目基于 React 和 JSON Schema,旨在通过简单配置快速生成页面动态列表来降低列表开发难度、提高工作效率。 DripTable 目前包含以下子项目:drip-table、drip-table-generator。 drip-table :动态列表解决方案的核心库

    2024年02月14日
    浏览(30)
  • 数字孪生智慧工厂三维可视化系统解决方案,打造新一代智慧工厂

    在制造业的快速发展和数字化转型的时代,智慧工厂已经成为制造企业前进的必经之路。数字孪生技术,作为工业数字化转型的核心动力,为打造智慧工厂提供了关键支持。其中,数字孪生智慧工厂三维可视化系统解决方案无疑是制造企业的得力助手,通过实时数据采集、数

    2024年02月08日
    浏览(48)
  • 【前端可视化】前端大屏适配方案

    动态设置 html 根字体的大小和 body 字体大小(使用 lib_flexible.js) 将设计稿的宽(1920)平均分成 24 等份,每一份 80px; html 根字体大小就设置为 80px,即 1rem = 80px,24rem = 1920px(移动端推荐分为 10 份); 将 body 字体大小设置为 16px; 最后需要使用插件或者其他方式将 px 转为 rem 单位:

    2024年02月11日
    浏览(29)
  • AI人工智能+区块链+物联网+大数据可视化平台建设综合解决方案

    因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片、文字、链接中所包含的软件/资料等,如有侵权,请跟我们联系删除,谢谢。将在收到信息后第一时间进行删除。 参考资料来源网络,仅用于行业知识分享,供个人学习参考,不得作商业用途。 AI人工

    2024年01月17日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包