vue3项目大屏适配方案(scale)及vue-tv-focusable库使用

ops/2025/1/15 22:01:37/

一. 适配方案代码(scale)

公共代码

javascript">export const useAdjustScale = () => {// * 指向最外层容器const pageRef = ref();// * 默认缩放值const scale = {width: '1',height: '1',};// * 需保持的比例(默认1.77778)
const designWidth = 1920
const designHeight = 1080const baseProportion = parseFloat((designWidth / designHeight).toFixed(5));const adjustScale = () => {// 当前宽高比const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5));if (pageRef.value) {if (currentRate > baseProportion) {// 表示更宽scale.width = ((window.innerHeight * baseProportion) / designWidth).toFixed(5);scale.height = (window.innerHeight / designHeight).toFixed(5);pageRef.value.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;console.log(scale.width, scale.height, 'moreWidth');} else {// 表示更高scale.height = (window.innerWidth / baseProportion / designHeight).toFixed(5);scale.width = (window.innerWidth / designWidth).toFixed(5);pageRef.value.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`;}}};onMountedOrActivated(() => adjustScale());useWindowSizeFn(() => adjustScale());return { pageRef, adjustScale };
};

onMountedOrActivated

javascript">import { nextTick, onMounted, onActivated } from 'vue';export function onMountedOrActivated(hook: Fn) {let mounted: boolean;onMounted(() => {hook();nextTick(() => {mounted = true;});});onActivated(() => {if (mounted) {hook();}});
}

useWindowSizeFn

javascript">import { tryOnMounted, tryOnUnmounted, useDebounceFn } from '@vueuse/core';interface WindowSizeOptions {once?: boolean;immediate?: boolean;listenerOptions?: AddEventListenerOptions | boolean;
}export function useWindowSizeFn<T>(fn: Fn<T>, wait = 150, options?: WindowSizeOptions) {let handler = () => {console.log('resizeHander');try {fn();} catch (error) {console.error(`${new Date().toLocaleTimeString()}🔥 -> useWindowSizeFn -> error:`, error);}};const handleSize = useDebounceFn(handler, wait);handler = handleSize;const start = () => {if (options && options.immediate) {handler();}window.addEventListener('resize', handler);};const stop = () => {window.removeEventListener('resize', handler);};tryOnMounted(() => {start();});tryOnUnmounted(() => {stop();});return [start, stop];
}

使用核心举例

javascript">  <div id="dashboard" ref="pageRef"></div>
// * 适配处理const { pageRef } = useAdjustScale();

二.vue-tv-focusable

用途:主要用于大屏项目在tv中显示时,利用遥控器控制dom元素的聚焦
使用示例

javascript"><divclass="secure"ref="secureRef"v-focusable="true"@up="secureFocus('up')"@right="secureFocus('right')"@click="secureClick"></div>
javascript"> const secureFocus = (e) => {if (e == 'up') {proxy.$tv.requestFocus(introduceRef.value);} else if (e == 'right') {proxy.$tv.requestFocus(qualityRef.value);}};
javascript"> import { getCurrentInstance } from 'vue';const { proxy } = getCurrentInstance();const introduceRef = ref<HTMLFrameElement>();const qualityRef = ref<HTMLFrameElement>();

详细使用方法可参考vue-tv-focusable


http://www.ppmy.cn/ops/150027.html

相关文章

4Hive计算引擎

4Hive计算引擎 1 MR计算引擎2 Tez计算引擎3 Spark计算引擎 目前Hive支持MapReduce、Tez和Spark 三种计算引擎。 1 MR计算引擎 MR运行的完整过程&#xff1a; Map在读取数据时&#xff0c;先将数据拆分成若干数据&#xff0c;并读取到Map方法中被处理。数据在输出的时候&#…

fast-crud select下拉框 实现多选功能及下拉框数据动态获取(通过接口获取)

教程 fast-crud select示例配置需求:需求比较复杂 1. 下拉框选项需要通过后端接口获取 2. 实现多选功能 由于这个前端框架使用逻辑比较复杂我也是第一次使用,所以只记录核心问题 环境:vue3,typescript,fast-crud ,elementPlus 效果 代码 // crud.tsx文件(/.ts也行 js应…

基于单片机的书写坐姿规范提醒器的设计(论文+源码)

1功能设计 本课题为基于单片机的书写坐姿规范提醒器的设计&#xff0c;其主要针对学生在进行书写时&#xff0c;经常会出现坐姿不对等现象&#xff0c;这样长期下去会影响学生的身体健康&#xff0c;因此本系统在功能上设计如下&#xff1a; 采用超声波传感器检测坐姿&#x…

如何解决Webview和H5缓存问题,确保每次加载最新版本的资源

WebView 用于加载 H5 页面是常见的做法&#xff0c;它能够加载远程的 HTML、CSS、JavaScript 资源&#xff0c;并且让 Web 应用嵌入到原生 App 中。然而&#xff0c;WebView 的缓存机制有时会导致用户看到的是旧版本的页面或资源&#xff0c;尤其是在 H5 发版后&#xff0c;iOS…

Vite源码学习分享(一)

!](https://i-blog.csdnimg.cn/direct/971c35b61c57402b95be91d2b4965d85.png) 同一个项目 vite VS webpack启动速度对比

如何定位导致 Django 错误的文件

在 Django 开发中&#xff0c;当发生错误时&#xff0c;定位问题所在的文件和代码行是调试的重要步骤。以下是一些常用的方法和技巧来定位导致 Django 错误的文件&#xff1a; 1、问题背景 在项目中使用了 shrink 工具尝试运行 collect static 时&#xff0c;出现 TemplateSyn…

checkbox控制table中checkbox列全选和全不选|判断table多选的选中项目

①checkbox控制table中checkbox列全选和全不选 <table class"layui-table" id"table"><tr><td><input type"checkbox" id"ckb" onchange"ckb_change()" /></td><td>任务ID</td>&…

3. 使用springboot做一个音乐播放器软件项目【封装项目使用的工具类】

上一章文章 我们做了 音乐播放器这个项目的 框架搭建和一些基础配置文件。 参考网址&#xff1a; https://blog.csdn.net/Drug_/article/details/145044096 这篇文章我们来分享一些 项目中用到的一些工具类。 一般项目里 我会创建一个 utils 文件夹 来存放 项目中常用的工具类…