首页 > 其他分享 >vue 大屏等比缩放适配方法

vue 大屏等比缩放适配方法

时间:2022-08-23 15:46:55浏览次数:71  
标签:scale const 缩放 适配 50% height window 大屏 appRef

大屏适配方案之一,根据设计稿尺寸,固定容器尺寸,内容完全按设计稿大小开发,可保持比例居中显示。

//windowScale.js
export function useIndex(appRef,fill) {
  // * appRef指向最外层容器

  // * 定时函数
  let timer = null
  // * 默认缩放值
  const scale = {
    width: '1',
    height: '1'
  }
  // * 设计稿尺寸(px)
  const baseWidth = 1920
  const baseHeight = 1080

  // * 需保持的比例(默认2)
  const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
  // const baseProportion = 2
  const calcRate = () => {
    // 当前宽高比
    const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
    if(fill){//是否满屏拉伸
      scale.width = (window.innerWidth / baseWidth)
      scale.height = (window.innerHeight / baseHeight)
      appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
      return
    }
    if (appRef) {
      if (currentRate > baseProportion) {
        // 表示更宽
        scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)
        scale.height = (window.innerHeight / baseHeight).toFixed(5)
        appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
      } else {
        // 表示更高
        scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)
        scale.width = (window.innerWidth / baseWidth).toFixed(5)
        appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
      }
    }


    
  }

  const resize = () => {
    clearTimeout(timer)
    timer = setTimeout(() => {
      calcRate()
    }, 100)
  }

  // 改变窗口大小重新绘制
  const windowDraw = () => {
    window.addEventListener('resize', resize)
  }

  return {
    appRef,
    calcRate,
    windowDraw
  }
}

使用

<template>
  <div class="container" ref="appRef"></div>
</template>

<script setup>
import { useIndex } from "@/utils/windowScale.js";
const appRef = ref(null); const { calcRate, windowDraw } = useIndex(appRef.value, false); calcRate(); windowDraw(); </script> <style> .container{ width: 1920px; height: 1080px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); transform-origin: left top; transition: all 0.28s; } </style>

 

标签:scale,const,缩放,适配,50%,height,window,大屏,appRef
From: https://www.cnblogs.com/xym0710/p/16616445.html

相关文章

  • Day16-响应式布局+移动端适配
    0821:Day16响应式布局:响应式布局:响应式布局 特点: 面对不同的分辨率设备灵活性强 能够快捷解决多设备显示适应问题 缺点:媒体查询:媒体查询:根据显示器的特性,为其设......
  • 大屏小程序探索实践 | Cube 技术解读
    简介: 支付宝客户端有极强的动态化诉求,不论iOS还是Android平台,重新分发软件包从时间上,效率上难以满足产品运营的要求,因此客户端动态化技术应运而生。Cube起源于Nati......
  • codesys作为本机ethernet/ip适配器
    摘要:codesys作为本机EIP适配器,也就是说在Codesys中自己配置变量,然后导出为EDS文件,其它设备导入这个EDS文件,就可以和codesys通过Ethernet/IP的方式通信。以欧姆龙PLCCP1H......
  • Nginx代理:通过同个域名同个端口分别在PC端和手机端访问不同的适配页面
    一、nginx配置1、传递请求头最终目的是要使用UserAgent头来识别用户的客户端,然后返回不同的内容给不同的UA用户。而CDN(内容分发网络)缓存并不会区分UA(UserAgent),只......
  • Qt 系统缩放
    因为做更新程序,系统缩放问题老板说丑一直以为是分辨率的问题同事告诉我说是系统缩放具体看这个博客:Qt使用全局缩放进行全分辨率适配(QT_SCALE_FACTOR)_mob60475707aabc......
  • 适配器的应用(泛型模式)
    适配器模式是一种重要的设计模式,能让代码简练。直接上代码。定义接口,如下所示:publicinterfaceIOrderOperate<C,U,D>{/***创建单据*/boolea......
  • React--移动端适配
    适配原理选择某个手机的尺寸大小作为基准,其他手机进行等比例缩放一般选择iPhone6(2倍屏幕),屏幕宽度为:375px适配方式rem:需要手动修改html元素的font-s......
  • 精选12份高级3D地图大屏模板(涵盖全国各地)
    在前几年,静态数据可视化是主流,一度占据了人们的视野,直到近几年来,随着云计算、物联网等高新技术的发展和应用,人们才开始逐渐接触动态的数据可视化。3D可视化更受大众所喜爱,......
  • 手机网页限制用户缩放代码 (2014-03-25 18:16:52)
    网页手机wap2.0网页的head里加入下面这条元标签,在iPhone的浏览器中页面将以原始大小显示,并不允许缩放。    width-viewport的宽度height-viewport的高度  initi......
  • 适配器模式
    1.定义将一个类的接口变成客户端所期待的另一种接口,从而使原本接口不匹配而无法再一起工作的两个类能够再一起工作。2.类图  3.例子会手语的人将新闻联播表达给聋......