首页 > 其他分享 >【前端可视化】大屏scale适配vue3 hooks

【前端可视化】大屏scale适配vue3 hooks

时间:2023-04-28 10:55:48浏览次数:36  
标签:scale option 缩放 适配 targetY let targetX vue3 document

useScalePage.js

import { onMounted, onUnmounted } from 'vue';
import _ from 'lodash';

/**
  大屏适配的 hooks
 */
export default function useScalePage(option) {
  const resizeFunc = _.throttle(function () {
    triggerScale(); // 动画缩放网页
  }, 100);

  onMounted(() => {
    triggerScale(); // 动画缩放网页
    window.addEventListener('resize', resizeFunc);
  });

  onUnmounted(() => {
    window.removeEventListener('resize', resizeFunc); // 释放
  });

  // 大屏的适配
  function triggerScale() {
    // 1.设计稿的尺寸
    let targetX = option.targetX || 1920;
    let targetY = option.targetY || 1080;
    let targetRatio = option.targetRatio || 16 / 9; // 宽高比率

    // 2.拿到当前设备(浏览器)的宽度
    let currentX = document.documentElement.clientWidth || document.body.clientWidth;
    let currentY = document.documentElement.clientHeight || document.body.clientHeight;

    // 3.计算缩放比例
    let scaleRatio = currentX / targetX; // 参照宽度进行缩放 ( 默认情况 )
    let currentRatio = currentX / currentY; // 宽高比率

    // 超宽屏
    if (currentRatio > targetRatio) {
      // 4.开始缩放网页
      scaleRatio = currentY / targetY; // 参照高度进行缩放
      document.body.style = `width:${targetX}px; height:${targetY}px;transform: scale(${scaleRatio}) translateX(-50%); left: 50%`;
    } else {
      // 4.开始缩放网页
      document.body.style = `width:${targetX}px; height:${targetY}px; transform: scale(${scaleRatio})`;
    }
  }
}

使用

<template>
  <!-- 路由占位 -->
  <router-view />
</template>

<script setup>
import { RouterView } from 'vue-router';
import useScalePage from '@/hooks/useScalePage';

let option = {
  targetX: 1920,
  targetY: 1080,
  targetRatio: 16 / 9,
};
// 大屏适配
useScalePage(option);
</script>

<style scoped></style>

标签:scale,option,缩放,适配,targetY,let,targetX,vue3,document
From: https://www.cnblogs.com/wx980416/p/17361505.html

相关文章

  • BigDecimal的setScale常用方法(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP、ROUND_HALF_DOW
    BigDecimal的setScale四大常用方法总结//设置小数点后第三位数字一大一小观察效果BigDecimalnum=newBigDecimal("3.3235667");BigDecimalnumOne=newBigDecimal("3.3275667");1、ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1//ROUND_UP--进位制:不管保留数......
  • Vue3实现组件级基类的几种方法
    Vue3的组件有三种代码组织方式纯OptionAPI(不含setup)optionAPI+setup纯setup(即compositionAPI)对于这三种形式,设置基类的方法也略有不同。使用mixins、extendsvue3提供了mixins和extends,但是尝试之后发现这两种方法只支持纯OptionAPI,设置的data会被识别,但是设置的......
  • Vue3路由正确写法
    import{createRouter,createWebHistory}from'vue-router'importHomefrom'@/view/Home.vue';importLoginfrom'@/view/Login.vue'constroutes=[{path:'/',component:Home},{path:'/login',......
  • vue3 ts 项目文件夹解析
    vue3ts项目文件夹解析layouts文件夹通常用于存放应用程序中的布局组件或布局相关的文件。布局组件是用于包装应用程序中的页面内容的组件,通常包含头部导航、侧边栏、页脚、页面标题等等。布局组件可以在不同的页面中共享,并且可以为应用程序带来一致的外观和体验。core存放......
  • WIN7下安装VUE3.0
    1、准备工作(你可以检查,清楚的话可以不用管)1.1、检查nodejs版本:node-v1.2、检车npm版本:npm-v1.3、查看VUE脚手架版本:vue--version或vue-V(大写的V)1.4、卸载VUE2版本命令:npmuninstallvue-cli-g1.5、卸载VUE3版本命令:npmuninstall-g@vue/cli2.下载node.js及配置tip......
  • 前端项目使用vw视口单位进行适配时字体大小的解决方案
    使用视口单位vw来实现响应式排版。1vw等同于视口宽度的百分之一,即如果你用vw来设定字体大小的话,字体的大小将总是随视口的大小进行改变。问题在于,当做上面的事情的时候,因为文本总是随着视口的大小改变大小,用户失去了放缩任何使用vw单位的文本的能力。所以你永远都不要只用viewpo......
  • pinia vue3 ts 切换到其他页面后再切回来数据不见了
    piniavue3ts切换到其他页面后再切回来数据不见了刷新有数据,但是切换到其他页面后再切回来数据不见了,我需要切回来后数据还有。因为我的数据是刷新的话就会watch监视数据有没有改变,但是切换其他页面不会触发我应该把得到的数据存储到store里面这样切换其他页面也不会消失......
  • vue3 ts 写搜索联系人功能逻辑
    vue3ts写搜索联系人功能vue<inputtype="text"v-model="search"placeholder="Searchcontacts"><templatev-for="(item,index)infilteredData":key="index">ts!search.value表示如果search.value为空或......
  • html文件中使用vue3+element-plus开发模版
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"content="w......
  • 安装多个NodeJS windows上安装多个Nodejs版本 解决vue2/vue3同时运行
    第一步下载nvm-windowsnvm-windows下载地址:Github最新下载地址进入之后直接下载第二步安装NVM注意路径一定不要包含空格中文否则会报错注意安装路径一定不要包含空格中文否则会报错 点击安装之后如果之前安装了nodejs的话会提示希望nvm管理已安装node版本吗点击是......