可视化大屏实现屏幕自适应和自动全屏的实现

前言

在可视化大屏项目中,屏幕适配是绕不过去的一个问题(ps:如果知道大屏展示的屏幕是固定的,当我没说)。这里简单介绍通过 css的transform属性 里面的 scal() 实现常规屏幕适配。

常规屏幕:
  • 1366 * 768
  • 1920 * 1080 (最常见的大屏分辨率)
  • 2560 * 1440 (2k)
  • 3840 * 2160 (4k)
  • 5120 * 2880 (5k)
其他场景屏幕:
  • 1280 * 800
  • 1440 * 900

一、自适应实现

1. 新增自适应组件
<template><div class="screen-adapter"><div class="content-wrap" :style="style"><slot></slot></div></div>
</template><script>
export default {name: 'ScreenAdapter',props: {w: { // 设计图尺寸宽type: Number,default: 1920,},h: { // 设计图尺寸高type: Number,default: 1080,},},data() {return {style: {width: `${this.w}px`,height: `${this.h}px`,transform: 'scale(1) translate(-50%, -50%)', // 默认不缩放,垂直水平居中},};},mounted() {this.setScale();this.onresize = this.debounce(() => this.setScale(), 100);window.addEventListener('resize', this.onresize);},methods: {// 防抖debounce(fn, t) {const delay = t || 500;let timer;// eslint-disable-next-line func-namesreturn function () {// eslint-disable-next-line prefer-rest-paramsconst args = arguments;if (timer) {clearTimeout(timer);}const context = this;timer = setTimeout(() => {timer = null;fn.apply(context, args);}, delay);};},// 获取缩放比例getScale() {// console.log(window.innerHeight, window.innerWidth);const w = window.innerWidth / this.w;const h = window.innerHeight / this.h;return w < h ? w : h;// return {w, h};},// 设置缩放比例setScale() {this.style.transform = `scale(${this.getScale()}) translate(-50%, -50%)`;},},beforeDestroy() {window.removeEventListener('resize', this.onresize);},
}
</script><style lang='scss' scoped>
.screen-adapter {width: 100vw;min-height: 100%;max-height: 100vh;overflow: hidden;// 添加一个背景色,在适配不成功(上下或者左右有空白时)这个背景色和大屏主题色相似,一定程度上看不出来;该方案只在适配要求不高(只做常规屏幕适配)情况下适用background: #071524;.content-wrap {transform-origin: 0 0;position: absolute;top: 50%;left: 50%;}
}
</style>
2. 使用自适应组件
<template>  <screen-adapter><!-- 大屏内容组件 --><big-screecn-page></big-screecn-page></screen-adapter>
</template><script>
import ScreenAdapter from '@/components/screenAdapter/index';
import BigScreecnPage from '@/views/bigScreen/index'export default {name: 'Index',components: {ScreenAdapter,BigScreecnPage}
}

ps: 该方案只在适配要求不高(只做常规屏幕适配)情况下适用;在非常规屏幕下,可能在屏幕上下或者左右出现留白,在适配组件里加了一个大屏主题色相似的背景颜色,可以优化这一问题(混淆视听),哈哈哈

如果想要处理非常规屏幕的留白问题,可以参考:可视化大屏自适应方案

二、自动全屏实现

1. 使用screenfull插件 (推荐)

快速开始

使用方法
  1. 首先安装 npm install screenfull --save
  2. 在使用.vue文件中 引入 import screenfull from ‘screenfull’
  3. 在按钮方法中调用 screenfull.toggle()
  4. 还可以检测全屏状态 screenfull.isFullscreen
  5. 测试浏览器是否支持全screenfull screenfull.isEnabled
API (重点)
  • request(ele) 全屏
  • exit() 退出全屏
  • toggle() 切换全屏
  • on(event, function) : event为 ‘change’ | ‘error’ 注册事件
  • off(event, function) : 移除前面已经注册的事件
  • element: 返回一个全屏的dom节点,如果没有就为 null
  • isFullscreen : 是否是全屏状态
  • isEnabled : 判断是否支持全屏
使用注意事项
  1. requestFullscreen方法只能由用户触发。
  2. 页面跳转需先退出全屏
  3. 进入全屏的元素,将脱离其父元素,所以可能导致之前某些css的失效
  4. 解决方案:使用 :full-screen伪类 为元素添加全屏时的样式(使用时为了兼容注意添加-webkit、-moz或-ms前缀)
    我这里是使用原生的方法修改了css
    5.一个元素A全屏后,其子元素要再全屏,需先让元素A退出全屏
使用时出现编译错误

提示:在vue项目中导入screenfull插件,出现编译错误,错误如图所示:
在这里插入图片描述
这是因为安装的screenfull插件版本过高, 降低插件版本即可:npm install screenfull@4.2.0 --save

参考文章:https://blog.csdn.net/weixin_45665171/article/details/129799619

具体使用实例:
// 一些代码实在vue3中编写
import screenfull from 'screenfull';onMounted(() => { setTimeout(() => {const thisPageEl = document.querySelector('.big-screen-page-box');thisPageEl && screenfull.request(thisPageEl);}, 50);
});
onUnmounted(() => {screenfull.exit();});

 
 
文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出

对博客文章的引用,若原文章博主介意,请联系删除!请原谅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268996.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥备赛】双指针

日志统计 双指针在算法中也是经常会用到的&#xff0c;比如原地交换数组中的元素就可以用双指针来做&#xff0c;但是有的时候可能看不出来是双指针的思想。 对于一对数字可以用pair类型&#xff0c;cnt表示类型的次数&#xff0c;bool数组表示当前是否符合大于等于k的条件。 …

Vue.js+SpringBoot开发高校实验室管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实验管理模块2.4 实验设备模块2.5 实验订单模块 三、系统设计3.1 用例设计3.2 数据库设计 四、系统展示五、样例代码5.1 查询实验室设备5.2 实验放号5.3 实验预定 六、免责说明 一、摘…

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…

【千字总结】爬虫学习指南-2024最新版

介绍 如何自学爬虫&#xff1f;今天有一个兄弟这样问我&#xff0c;可以看到打了很多字&#xff0c;诚意肯定是很足的&#xff0c;也是对我的内容给予了肯定&#xff0c;让我非常的开心。既然难得有人问我&#xff0c;那我一定要好好做一个回答。 我下面将要说的内容没有任何话…

【Maven】Maven 基础教程(四):搭建 Maven 私服 Nexus

《Maven 基础教程》系列&#xff0c;包含以下 4 篇文章&#xff1a; Maven 基础教程&#xff08;一&#xff09;&#xff1a;基础介绍、开发环境配置Maven 基础教程&#xff08;二&#xff09;&#xff1a;Maven 的使用Maven 基础教程&#xff08;三&#xff09;&#xff1a;b…

数据迁移DTS | 云上MySQL 数据库迁移至达梦数据库

引入 云上 MySQL 数据库 —> 向达梦国产化数据库迁移 下载&安装 达梦客户端工具 DM->可参考之前国产化专栏达梦文章 创建模式 在客户端分别依次执行以下命令脚本&#xff08;这里没有通过客户端管理工具去创建达梦数据库的模式&#xff0c;当然也可以通过图形化界…

YOLOv8独家原创改进:特征融合涨点篇 | 广义高效层聚合网络(GELAN) | YOLOv9

💡💡💡本文独家改进:即结合用梯度路径规划(CSPNet)和(ELAN)设计了一种广义的高效层聚合网络(GELAN),高效结合YOLOv8,实现涨点。 将GELAN添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现…

MySQL-----视图

一 视图 ▶ 介绍 视图view是一个虚拟表&#xff0c;非真实存在&#xff0c;其本质是根据SQL语句获取动态的数据集&#xff0c;并为其命名&#xff0c;用户使用时只需使用视图名称即可获取结果集&#xff0c;并可以将其当作表来使用。 数据库中存放了视图的定义&…

格两例12345

osu/Lucky Roll gaming 周末osu有道题&#xff1a;lcg已知低位 def lcg(s, a, b, p):return (a * s b) % pp getPrime(floor(72.7)) a randrange(0, p) b randrange(0, p) seed randrange(0, p) print(f"{p }") print(f"{a }") print(f"{b …

SketchUp Pro 2023:颠覆传统,重塑设计世界mac/win版

SketchUp Pro 2023是一款强大的三维建模软件&#xff0c;专为设计师、建筑师和创意专业人士打造。这款软件以其直观易用的界面和强大的功能而著称&#xff0c;为用户提供了无限的创意空间。 SketchUp Pro 2023 软件获取 SketchUp Pro 2023在用户体验方面进行了全面的优化&…

20240304-2-计算机网络

计算机网络 知识体系 Questions 1.计算机网络分层的优点和缺点 优点 各层之间是独立的&#xff1b;灵活性好&#xff1b;结构上可分割开&#xff1b;易于实现和维护&#xff1b;能促进标准化工作。 缺点&#xff1a; 降低效率&#xff1b;有些功能会在不同的层次中重复出现&…

如何对比 MySQL 主备数据的一致性?

随着业务范围的扩大&#xff0c;很多企业为了保障核心业务的高可用性&#xff0c;选择了 MySQL 主从架构&#xff0c;这一套方案通常具备主备数据同步、数据备份与恢复、读写分离、高可用切换等特性&#xff0c;是一种相当成熟可靠的数据库架构方案。然而这套方案在特定情况下可…

安装 docker 可视化工具 portainer

portainer 官方网站 https://www.portainer.io/ 一、portainer 介绍 Portainer是一款开源的容器管理平台&#xff0c;它提供了一个直观易用的Web界面&#xff0c;帮助用户管理Docker容器集群、镜像、卷等资源。Portainer 支持多种 Docker 环境&#xff0c;包括本地Docker、Sw…

数学建模【多元线性回归模型】

一、多元线性回归模型简介 回归分析是数据分析中最基础也是最重要的分析工具&#xff0c;绝大多数的数据分析问题&#xff0c;都可以使用回归的思想来解决。回归分析的任务就是&#xff0c;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进…

【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建

&#x1f308;欢迎来到C项目专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mysq…

毕业论文页眉页脚的设置

目录 一、理解&#xff1a;分页符和分节符的区别 二、页眉设置具体步骤 三、页脚设置具体步骤 一、理解&#xff1a;分页符和分节符的区别 分页符是重新一页开始而已&#xff0c;和页码无关&#xff01; 分节符是从这里开始&#xff0c;是新的小节&#xff0c;页码和页眉都…

前后端依赖下载上传

在某些情况下&#xff0c;可能需要在没有互联网连接的环境中进行构建或部署。通过提前下载所有依赖&#xff0c;你可以将它们保存在本地&#xff0c;然后在没有网络连接时使用&#xff0c;提高构建或部署的效率。 前端下载依赖 脚本getTzgUrl.js const { readFileSync, writ…

【前端寻宝之路】总结学习使用CSS的引入方式

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-BNJBIEvpN0GHNeJ1 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

死记硬背spring bean 的生命周期

1.bean的生命周期 我们平常经常使用类似于new Object()的方式去创建对象&#xff0c;在这个对象没有任何引用的时候&#xff0c;会被gc给回收掉。而对于spring而言&#xff0c;它本身存在一个Ioc容器&#xff0c;就是用来管理对象的&#xff0c;而对象的生命周期也完全由这个容…

上帝视角看GPU(5):图形流水线里的不可编程单元

【GPU】图形流水线基础【GPU】逻辑上的模块划分【GPU】部署到硬件【GPU】完整的软件栈 前几期我们过了一遍GPU的软硬栈。这次我们将深入GPU图形流水线的一些细节&#xff0c;看看那些不可编程的模块是怎么工作的。 对于GPU的图形流水线来说&#xff0c;最核心最重要的一个组件就…