当前位置: 首页 > news >正文

vue3实现页面端的自适应布局

安装插件:

 npm install lib-flexible-computer
 npm install postcss-px2rem
 npm install px2rem-loader

main.js配置:

引入外部配置

 import { initRem } from './utils/rem';
 import "lib-flexible-computer";
 initRem(); // 初始化 rem 响应式

rem.js配置

let resizeTimeout = null;

function debounce(func, wait) {
    return function (...args) {
        clearTimeout(resizeTimeout);
        resizeTimeout = setTimeout(() => func.apply(this, args), wait);
    };
}

export function setRemUnit(base = 1920, remUnit = 192) {
    const html = document.documentElement;
    const clientWidth = html.clientWidth;

    const minScale = 1;
    const maxScale = 1.2;

    let scale = clientWidth / base;
    scale = Math.max(minScale, Math.min(maxScale, scale));

    let fontSize = scale * remUnit;
    const minFontSize = 20; // 设置最小字体大小
    if (fontSize < minFontSize) {
        fontSize = minFontSize;
    }

    html.style.setProperty('--rem-unit', `${fontSize}px`);
}

export function initRem(base = 1920, remUnit = 192) {
    const html = document.documentElement;
    html.style.transition = 'none';

    setRemUnit(base, remUnit);

    window.onload = function () {
        document.documentElement.style.visibility = 'visible';
        html.style.transition = 'font-size 0.2s ease-out';
        setRemUnit(base, remUnit);
    };

    const resizeHandler = debounce(() => {
        html.style.transition = 'none';
        setRemUnit(base, remUnit);
        requestAnimationFrame(() => {
            html.style.transition = 'font-size 0.2s ease-out';
        });
    }, 100);

    window.addEventListener('resize', resizeHandler);

    if (document.fonts && document.fonts.ready) {
        document.fonts.ready.then(() => {
            setRemUnit(base, remUnit);
        });
    }
}

vite配置:

import px2rem from "postcss-px2rem"

在这里插入图片描述

相关文章:

  • 解决 vite.config.ts 引入scss 预处理报错
  • java学习笔记16——java8的其他新特性
  • 遇到git提交报错:413
  • Nginx常用工具
  • cs224w课程学习笔记-第10课
  • Linux系统使用lshw生成硬件报告方法
  • 循环神经网络 - LSTM 网络的各种变体
  • Go语言中的垃圾回收是如何工作的?
  • 面向基于发布-订阅的物联网网络的匿名 MQTT 分析
  • SVMSPro分布式综合安防管理平台-->以S3存储革新,开启智能安防新纪元
  • Git 分支整合策略:Cherry-pick、Merge、Rebase 三者之间对比
  • 【图像分类】【深度学习】系列学习文章目录
  • 部署Windows域
  • JAVA:SpringBoot 实现图片防盗链的技术指南
  • 24-栅格布局详解(CSS3)
  • 虚拟机和WSL对比
  • c# 运用策略模式与模板方法模式实例
  • 解决Ubuntu20.04安装ROS2的问题(操作记录)
  • LangGraph 概述
  • 栈栈栈栈栈
  • 如果建网站/东莞疫情最新消息今天新增
  • 网站开发属于什么系统/google推广seo
  • vs2008做网站/西安今天出大事
  • 无锡做推广的网站/粤语seo是什么意思
  • 1万元左右的加盟店/seo网站关键词排名提升
  • asp网站免费完整源码/网络营销五个主要手段