scale自适应分辨率 实现缩放自适应(vue3)

news/2024/7/15 17:56:06 标签: javascript, react.js, 前端

组件

javascript"><template>
  <div
    class="ScaleBox"
    :style="{
      width: width + 'px',
      height: height + 'px',
    }"
  >
    <slot></slot>
  </div>
</template>

<script setup>
import {
  defineProps,
  onMounted,
  onUnmounted,
  reactive,
  toRef,
  watch,
} from "vue";
import { debounce } from "@/util/scale.ts";
const props = defineProps({
  width: Number,
  height: Number,
});
const width = toRef(props, "width");
const height = toRef(props, "height");
let scale = reactive({
  w: 1,
  h: 1,
});
let getScale = () => {
  // const wh = window.innerHeight / height;
  // const ww = window.innerWidth / width;
  // return [wh,ww];
  const w = window.innerWidth / width.value;
  const h = window.innerHeight / height.value;
  let scale = w < h ? w : h;
  return [scale, scale];
};
let setScale = (e) => {
  // 缩放比
  scale.h = getScale()[0];
  scale.w = getScale()[1];
};
let reCalc = debounce(setScale);
watch(
  () => width.value,
  () => {
    setScale();
  }
);

onMounted(() => {
  setScale();
  window.addEventListener("resize", reCalc);
});
onUnmounted(() => {
  window.removeEventListener("resize", reCalc);
});
</script>
<script>
export default {
  name: "ScaleBox",
};
</script>

<style lang="scss" scoped>
.ScaleBox {
  position: absolute;
  // transform: scale(v-bind('scale.h')) translate(-50%, -50%);
  transform: scale(v-bind("scale.w"), v-bind("scale.h")) translate(-50%, -50%);
  display: flex;
  flex-direction: column;
  transform-origin: top left;
  left: 50%;
  top: 50%;
  transition: 0.2s;
  z-index: 999;
  // background: rgba(255, 0, 0, 0.3);
}
</style>

使用

javascript"><script setup lang="ts">
const otherConfig = ref({
  pageWidth: 1920,
  pageHight: 1080,
});
otherConfig.value.pageHight = window.screen.availHeight;
otherConfig.value.pageWidth = window.screen.availWidth;
</script>
<template>
  <ScaleBox
    :width="otherConfig.pageWidth"
    :height="otherConfig.pageHight"
    style="background: #eeeeee"
  >
  //自适应内容
  </ScaleBox>
</template>

http://www.niftyadmin.cn/n/5188373.html

相关文章

2311rust到31版本更新

1.27.1稳定版 在此修补程序前,下例在编译器内部恐慌. fn main() {let a vec!["".to_string()];a.iter().enumerate().take_while(|(_, &t)| false).collect::<Vec<_>>(); }1.27.1拒绝上述代码,并显示以下错误消息: error[E0507]: cannot move ou…

Java进阶笔记(面向对象后, 持续更新)

常用API 游戏打包成exe 考虑的因素 要有图形化界面代码要打包起来游戏用到的图片也要打包JDK也要打包 核心步骤 把所有代码打包成一个压缩包, jar后缀的压缩包把jar包转换成exe安装包把第二部的exe, 图片, JDK整合在一起, 变成最终的exe安装包 1. Math 是一个帮助我们用…

VBA技术资料MF83:将Word文档批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

合众汽车选用风河Wind River Linux系统

导读合众新能源汽车股份有限公司近日选择了Wind River Linux 用于开发合众智能安全汽车平台。 合众智能安全汽车平台(Hozon Automo-tive Intelligent Security Vehicle Plat-form)是一个面向高性能服务网关及车辆控制调度的硬件与软件框架&#xff0c;将于2024年中开始投入量产…

《硅基物语.AI写作高手:从零开始用ChatGPT学会写作》《从零开始读懂相对论》

文章目录 《硅基物语.AI写作高手&#xff1a;从零开始用ChatGPT学会写作》内容简介核心精华使用ChatGPT可以高效搞定写作的好处如下 《从零开始读懂相对论》内容简介关键点书摘最后 《硅基物语.AI写作高手&#xff1a;从零开始用ChatGPT学会写作》 内容简介 本书从写作与ChatG…

经典文献阅读之--Online Map Vectorization for Autonomous Driving:(基于栅格化的在线地图矢量化)

0. 简介 自动驾驶中的高精地图对于车辆的定位而言是非常重要的&#xff0c;一般来说高精地图需要耗费大量的时间完成。而随着深度学习的发展&#xff0c;使用深度学习来完成地图的矢量化是非常有用的一个操作。矢量化高精度&#xff08;HD&#xff09;地图对于自动驾驶而言至关…

flowable消息事件

一&#xff1a;启动事件 定义消息。 引用消息。 <startEvent id"msgStart" name"消息启动事件" isInterrupting"true"><messageEventDefinition messageRef"myMsgStart"></messageEventDefinition> </startE…

Allure集成Testng

目录 前言 介绍 安装 集成Testng 查看allure报告 前言 本节我们会介绍如何安装allure&#xff0c;allure集成testng生成测试报告。 介绍 Allure是一个用于测试报告生成的开源框架&#xff0c;它支持多种测试框架&#xff0c;包括JUnit、TestNG、Cucumber等。Allure的目…