当前位置: 首页 > news >正文

大屏适配方案一scale()

背景
在做大屏可视化项目的时候,一般设计稿会设计成1920 * 1080,但是页面写死1920 * 1080在2k、4k等分辨率的屏幕下是不适配的。

方案一:css3的缩放属性transform以及scale()
在做项目之前我们需要搞清楚客户的数据可视化平台需要在什么屏幕下展示,确定了实际屏幕比例,按照实际屏幕比例选择一个设计稿尺寸进行设计,设计稿出来后前端严格按照设计稿px进行开发页面即可。代码如下:
ScreenScale.vue

<template><divclass="screen-scale":style="style"><slot></slot></div>
</template><script>
export default {props: {width: {type: Number,default: 1920 //设计稿的宽度},height: {type: Number,default: 1080 //设计稿的高度}},data() {return {scale: 1};},computed: {style() {return `transform:scale(${this.scale}) translate(-50%, -50%);-ms-transform:scale(${this.scale}) translate(-50%, -50%); -moz-transform:scale(${this.scale}) translate(-50%, -50%); -webkit-transform:scale(${this.scale}) translate(-50%, -50%); -o-transform:scale(${this.scale}) translate(-50%, -50%); width:${this.width}px;height:${this.height}px;`;}},methods: {getScale() {//计算出缩放比let ww = window.innerWidth / this.width;let wh = window.innerHeight / this.height;this.scale = ww < wh ? ww : wh;}},mounted() {this.getScale();window.addEventListener('resize', this.getScale);},beforeDestroy() {window.removeEventListener('resize', this.getScale);}
};
</script><style scoped lang="less">
.screen-scale {transform-origin: 0 0;position: absolute;left: 50%;top: 50%;transition: 0.3s;overflow: hidden;
}
</style>

App.vue

<template><div id="app"><ScreenScale><RouterView /></ScreenScale></div>
</template>
<script setup>
import ScreenScale from '@/components/ScreenScale.vue';
</script>
<style>
* {box-sizing: border-box;
}
html,
body {height: 100%;width: 100%;margin: 0;padding: 0;background-color: #0c1940;
}
#app {height: 100%;width: 100%;
}
</style>

优点:此种方法的好处就是保证字体、图片等不被拉伸变形。’
缺点:在与设计稿比例不同的屏幕下会左右或者上下出现留白。

偷懒方法:v-scale-screen插件:Vue大屏自适应终极解决方案

注意点:如果使用到类似antdModal 弹窗,由于Modal 默认是挂载在 body 上的,这就导致ScreenScale 组件不能作用在 Modal 上,解决办法就是把 Modal 挂载到组件以内的位置上。参考:antdv Modal(对话框)指定挂载节点 demo

http://www.lryc.cn/news/255609.html

相关文章:

  • WordPress免费插件大全清单【2023最新】
  • 支付宝小程序接口传参会默认排序
  • Numpy数组的运算(第7讲)
  • node后端接口无法插入数据为emoji的表情的问题
  • Conda常用命令总结
  • Oracle数据库如何实现自增-序列Sequence介绍(适合小白)
  • ke14--10章-2JDBC例子
  • 04数据平台Flume
  • Redis--13--缓存一致性问题
  • 12.7作业
  • ssl什么是公钥和私钥?
  • github首次将文件合到远端分支,发现名字不是master,而是main
  • RTX 40 系彻底摆烂,NVIDIA 让三年老卡焕发第二春
  • ELK技术栈介绍及简单使用实例
  • 基于Java健身房课程管理系统
  • DAPP开发【02】Remix使用
  • 大华DSS S2-045 OGNL表达式注入漏洞复现
  • 大数据之HBase(二)
  • 前后端数据传输格式(下)
  • mysql pxc高可用离线部署(三)
  • XXL-JOB 日志表和日志文件自动清理
  • 常用sql记录
  • 设备温度和振动综合监测:温振一体式传感器的优点和应用
  • 彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】
  • yarn和npm的区别
  • 设计图中时序图
  • 反射实现tomcat
  • Ubuntu 安装 CUDA 和 cuDNN 详细步骤
  • ArkTS快速入门
  • HTTP不同场景下的通信过程和用户上网认证过程分析