vue项目大屏开发屏幕自适应为显示屏分辨率封装

1.目录结构

 2.resizeScreen.js文件中

// 居中铺满
export function centerFull({ width: pageWidth, height: pageHeight }) {
  const screenWidth = window.innerWidth; // 获取窗口实际宽度
  const screenHeight = window.innerHeight; // 获取窗口实际高度
  document.body.style.width = `${pageWidth}px`; // 设置body宽带
  document.body.style.height = `${pageHeight}px`; // 设置body高度

  const ratioX = screenWidth / pageWidth; // 宽度比例
  const ratioY = screenHeight / pageHeight; // 高度比例

  document.body.style.transform = `scale(${ratioX}, ${ratioY})`; // 将页面缩放成屏幕大小, scale(x,y)定义 2D 缩放转换。
  window.globalScale && window.globalScale.setScale(ratioX, ratioY); // 当window存在globalScale属性,则执行window.globalScale.setScale(ratioX, ratioY)
}

// 等比例铺满
export function equalRatioFull({ width: pageWidth, height: pageHeight }) {
  const screenWidth = window.innerWidth;
  const screenHeight = window.innerHeight;
  document.body.style.width = `${pageWidth}px`;
  document.body.style.height = `${pageHeight}px`;
  const ratioX = screenWidth / pageWidth;
  const ratioY = screenHeight / pageHeight;
  const scale = Math.min(ratioX, ratioY); //获得缩放比例比值最小的比例
  let offsetX = 0;
  let offsetY = 0;
  if (ratioX < ratioY) {
    offsetY = (screenHeight / ratioX - pageHeight) / 2;
  } else {
    offsetX = (screenWidth / ratioY - pageWidth) / 2;
  }
  document.body.style.transform = `scale(${scale}) translate(${offsetX}px, ${offsetY}px)`;
}

// 无样式
export function none() {
  // document.body.style.width = `${pageWidth}px`;
  // document.body.style.height = `${pageHeight}px`;
}

3.FitScreen.vue组件中

<script>
import { equalRatioFull, centerFull, none } from '@/utils/resizeScreen';

const displayMap = {
  centerFull,
  equalRatioFull,
  none,
};

export default {
  props: {
    displayType: {
      validator: function (value) {
        return Object.keys(displayMap).indexOf(value) !== -1;
      },
      default: 'centerFull',
    },
    pageSize: {
      type: Object,
      default: () => ({
        width: 1920,
        height: 1080,
      }),
    },
  },
  mounted() {
    const fitScreen = this.fitScreen.bind(this); // 将当前组件内容绑定到fitScreen方法中并付给fitScreen
    fitScreen(); // 调用fitScreen方法
    window.addEventListener('resize', fitScreen); // 监听window当发生resize事件时调用fitScreen方法
    this.$once('hook:beforeDestroy', function () {
      window.removeEventListener('resize', fitScreen); // 在组件摧毁前注销监听事件
    });
  },
  methods: {
    fitScreen() {
      displayMap[this.displayType](this.pageSize); // 调用指定覆盖函数
    },
  },
  render() {
    return null;
  },
};
</script>
<style lang="scss">
html, body {
  overflow: hidden;
}
body {
  transform-origin: top left; // 变形起点为左上方
}
</style>

4.App.vue 根组件中

<template>
  <div id="app">
    <fit-screen />
    <app-title />
    <router-view />
  </div>
</template>

<script>
import AppTitle from "./components/AppTitle";
import FitScreen from "./components/FitScreen";
import("./scss/common.scss");
export default {
  name: "App",
  components: { AppTitle, FitScreen },
  data() {
    return {
      pageSize: {
        width: 1920,
        height: 1080,
      },
    };
  },
  comments: {
    AppTitle,
    FitScreen,
  },
};
</script>

<style lang="scss">
#app {
}
</style>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue项目中实现PC端屏幕自适应可以按照以下步骤进行操作: 第一步:在代码中使用px作为单位,并根据设计稿的尺寸来进行还原。这样,不同的电脑屏幕大小会根据宽度进行等比缩放,实现自适应效果。 第二步:在根目录的src文件夹下创建一个util文件夹,并在util文件夹中创建一个flexible.js文件,用于等比适配。可以在node_modules里找到lib-flexible包,将其拷贝到utils文件夹中并重命名为flexible.js。然后修改flexible.js文件中的代码,将refreshRem函数的内容按需修改为适合自己的需求。这样可以实现PC端屏幕尺寸的自适应效果。 第三步:创建一个rem.js文件,可以将其放在utils文件夹下,用于配置rem等比适配。在rem.js中,设置基准大小为16,并定义setRem函数,用于设置页面根节点的字体大小,以实现等比缩放效果。同时,在页面加载时调用setRem函数进行初始化,并在窗口大小改变时重新调用setRem函数进行设置。这样可以实现页面的自适应效果。 以上是在Vue项目中实现PC端屏幕自适应的方法,通过设置单位为px并使用等比缩放的方式,可以实现不同屏幕大小的适应。同时,通过修改lib-flexible的源码和配置rem.js文件,可以进一步实现自定义的自适应效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue PC端屏幕分辨率自适应](https://blog.csdn.net/zhangxiaodui/article/details/127489131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue 如何让PC端不同屏幕大小分辨率自适应屏幕自适应)(postcss-px2rem、px2rem-loader、lib-flexible)](https://blog.csdn.net/qq_37831545/article/details/125819400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值