Vue3利用缩放进行屏幕分辨率适配的解决方案讲解

 更新时间:2024年09月26日 10:49:43   作者:明月清风*  
本文详细解析了如何在Vue3中实现一个自动根据设计宽度缩放并调整高度的响应式组件,组件的核心功能包括设计宽度设定、动态缩放比例计算和高度调整,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在前端开发中,实现响应式布局是确保用户界面在各种设备上表现一致的关键。本文将详细解析一个 Vue 3 组件的实现,这个组件根据设计宽度自动缩放,并调整其高度以适应窗口的变化。

组件实现概述

本文将介绍一个 Vue 3 组件,可以在浏览器窗口大小发生变化时自动调整其缩放比例和高度。这个组件的核心目标是使组件的内容在不同设备上看起来一致,无论设备的屏幕大小如何变化。

组件的核心功能

  • 设计宽度的定义:组件的设计宽度被设定为 1920 像素,可以根据UI图的设计尺寸自行修改。

  • 缩放计算:根据浏览器的实际宽度与设计宽度之间的比率,动态计算缩放比例。这个缩放比例会用于调整组件的显示效果,以适应不同屏幕宽度。

  • 动态高度调整:除了缩放,组件的高度也需要根据浏览器的高度动态调整,以保持内容的正确显示。

组件代码解析

下面是实现这个功能的 Vue 3 组件代码:

<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue';

// 设定设计宽度
const designWidthValue = 1920;
const designWidth = ref(`${designWidthValue}px`);
const zoom = ref(window.innerWidth / designWidthValue);
const containerHeight = ref(`${window.innerHeight / zoom.value}px`);
const scale = ref(`scale(${zoom.value})`);
const props = defineProps(['containerClass']);

// 更新尺寸的函数
function updateSize() {
  zoom.value = (window.innerWidth / designWidthValue).toFixed(3);
  scale.value = `scale(${zoom.value})`;
  containerHeight.value = `${window.innerHeight / zoom.value}px`;
}

// 组件挂载时,添加窗口大小变化的事件监听
onMounted(() => {
  window.addEventListener('resize', updateSize);
  updateSize();
});

// 组件卸载时,移除事件监听
onUnmounted(() => {
  window.removeEventListener('resize', updateSize);
});
</script>

<template>
  <div
    :class="props.containerClass"
    :style="{
      width: designWidth,
      height: containerHeight,
      overflow: 'hidden',
      transform: scale,
      transformOrigin: 'left top'
    }"
  >
    <slot></slot>
  </div>
</template>

<style scoped lang="scss">

</style>

代码解释

  • 引入 Vue Composition API:使用 refonMounted 和 onUnmounted 函数来管理组件状态和生命周期。

  • 计算设计宽度:通过 designWidthValue 设置设计宽度,并创建响应式变量 designWidth 和 zoomzoom 用于存储根据浏览器宽度计算得出的缩放比例。

  • 动态计算缩放比例updateSize 函数在窗口大小变化时被调用,它重新计算缩放比例 zoom 和组件的高度 containerHeighttoFixed(3) 方法用于确保缩放比例有三位小数,避免由于浮点数精度问题导致的不必要的变形。

  • 组件的样式:组件的样式通过内联样式进行设置,包括 widthheightoverflowtransform 和 transformOrigintransform 使用计算得出的缩放比例来调整组件的大小。

  • 事件监听:在组件挂载时,通过 onMounted 添加窗口大小变化的事件监听器,在组件卸载时通过 onUnmounted 移除事件监听器,防止内存泄漏。

在 Vue 应用中使用组件

要在你的 Vue 3 应用中使用这个组件,你需要在需要的地方导入并注册它。以下是一个在 App.vue 中使用 ResponsiveContainer 组件的示例:

<!-- src/App.vue -->
<template>
  <ResponsiveContainer containerClass="my-container">
    <h1>Welcome!</h1>
    <p>屏幕自适应</p>
  </ResponsiveContainer>
</template>

<script setup lang="ts">
import ResponsiveContainer from './components/ResponsiveContainer.vue';
</script>

<style scoped>
.my-container {
  background-color: #f5f5f5;
  border: 1px solid #ddd;
}
</style>

总结 

到此这篇关于Vue3利用缩放进行屏幕分辨率适配解决方案的文章就介绍到这了,更多相关Vue3缩放屏幕分辨率适配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue调用swiper插件步骤教程(最易理解且详细)

    vue调用swiper插件步骤教程(最易理解且详细)

    有时候我们需要在vue中使用轮播组件,如果是在vue组件中引入第三方组件的话,最好通过npm安装,从而进行统一安装包管理,下面这篇文章主要给大家介绍了关于vue调用swiper插件的相关资料,需要的朋友可以参考下
    2023-04-04
  • vue3实现alert自定义的plugins方式

    vue3实现alert自定义的plugins方式

    这篇文章主要介绍了vue3实现alert自定义的plugins方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue二次封装axios为插件使用详解

    Vue二次封装axios为插件使用详解

    这篇文章主要介绍了Vue二次封装axios为插件使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Vue router-view和router-link的实现原理

    Vue router-view和router-link的实现原理

    这篇文章主要介绍了Vue router-view和router-link的实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • vue如何根据条件判断按钮是否可以点击

    vue如何根据条件判断按钮是否可以点击

    这篇文章主要介绍了vue如何根据条件判断按钮是否可以点击,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue-router中的钩子函数和执行顺序说明

    vue-router中的钩子函数和执行顺序说明

    这篇文章主要介绍了vue-router中的钩子函数和执行顺序说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue运行项目时network显示unavailable的问题及解决

    vue运行项目时network显示unavailable的问题及解决

    这篇文章主要介绍了vue运行项目时network显示unavailable的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue+axios 拦截器实现统一token的案例

    vue+axios 拦截器实现统一token的案例

    这篇文章主要介绍了vue+axios 拦截器实现统一token的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Vue组件的使用及个人理解与介绍

    Vue组件的使用及个人理解与介绍

    本文介绍了VUE中组件的基本使用以及个人对VUE组件的理解,希望能帮助到大家
    2019-02-02
  • 浅析从vue源码看观察者模式

    浅析从vue源码看观察者模式

    本篇文章主要介绍了vue源码看观察者模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论