首页 > 其他分享 >大屏屏幕自适应大小的JS写法

大屏屏幕自适应大小的JS写法

时间:2023-09-11 14:33:47浏览次数:43  
标签:context 缩放 args JS timeout 大屏 写法 any wait

本项目用的是vue开发,首先需要定义一下根节点app节点的大小,这里用1920的默认宽度定义

    <style>
      #app {
        width: 1920px;
        margin: 0 auto;
        transform: scale(1);
        transform-origin: 0 0;
      }
    </style>

js部分通过缩放的写法去在每次页面变化的时候执行计算宽高

    // web定稿尺寸 19820*1080
const initPageW = 1920,
  initPageH = 1080

/**
 * @param {Function} func
 * @param {number} wait
 * @param {boolean} immediate
 * @return {*}
 */
export function debounce(func: any, wait?: any, immediate?: any) {
  let timeout: any, args: any, context: any, timestamp: any, result: any

  const later = function () {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp

    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
      timeout = setTimeout(later, wait - last)
    } else {
      timeout = null
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
      if (!immediate) {
        result = func.apply(context, args)
        if (!timeout) context = args = null
      }
    }
  }
  return function (...args: any) {
    // @ts-ignore
    context = this
    timestamp = +new Date()
    const callNow = immediate && !timeout
    // 如果延时不存在,重新设定延时
    if (!timeout) timeout = setTimeout(later, wait)
    if (callNow) {
      result = func.apply(context, args)
      context = args = null
    }

    return result
  }
}

// 根据窗口的广澳变动的比例进行缩放 设置动画原点
function animateResize() {
  var _jsc: any = document.getElementById('app'),
    _body: any = document.getElementById('content')

  let WH = window.innerHeight,
    WW = window.innerWidth,
    _jscH = _jsc.offsetHeight
  if (initPageW < WW) {
    //超过设计稿宽度后不进行缩放,居中显示
    _jsc.style.transform = 'scale(1)'
    _jsc.style.margin = '0 auto'
    if (_body) {
      _body.style.height = 'auto'
    }
  } else {
    // 缩放
    let minScale = Math.floor((WW / initPageW) * 10000) / 10000
    // 浏览器的滚滚动条宽度 17px
    // 内容区高度缩放后如果超过窗口高度,说明出现滚动条,可视区域宽度会缩小17px 重新计算缩放比,
    if (_jscH * minScale > WH) {
      minScale = Math.floor(((WW - 17) / initPageW) * 10000) / 10000
    }
    _jsc.style.transform = 'scale(' + minScale + ',' + minScale + ')'
    _jsc.style.margin = '0 0'
    if (_body) {
      _body.style.height = _jscH * minScale + 'px'
    }
  }
}
const _debounce = debounce(function () {
  animateResize()
}, 500)
window.onresize = _debounce as any

export { animateResize, _debounce }

最后在调用处引入即可

import { animateResize } from '~/utils/resize'

onMounted(() => {
  animateResize()
})

他会根据计算的属性最后生成类似如下的css样式:
transform: scale(0.9911, 0.9911)
从而达到自适应的效果

标签:context,缩放,args,JS,timeout,大屏,写法,any,wait
From: https://www.cnblogs.com/llcdbk/p/17693483.html

相关文章

  • Js基础-循环语句
    循环语句在js当中主要用于重复做一件事情。js当中最主要的循环语句有三种,for循环,while循环和do-while循环forfor是一种经常被用到的循环结构例如:控制台循环打印1到10的数字//for括号后跟着三个表达式,三个表达式用分号(;)隔开//vari=0表示定义一个循环遍历变量,......
  • 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?
    Vue.js官方脚手架create-vue是怎么实现的?摘要本文共分为四个部分,系统解析了vue.js官方脚手架create-vue的实现细节。第一部分主要是一些准备工作,如源码下载、项目组织结构分析、依赖分析、功能点分析等;第二部分分析了create-vue脚手架是如何执行的,执行文件的生成细节......
  • js箭头函数
    箭头函数中this的行为与常规函数的this行为有很大不同。无论如何执行或在何处执行,箭头函数内部的this值始终等于外部函数的this值。换句话说,箭头函数可按词法解析this,箭头函数没有定义自己的执行上下文。(1).格式:参数=>表达式/语句leta=b=>b*2;leta=b=>{......
  • 前端科普系列-CommonJS:不是前端却革命了前端
    前端科普系列-CommonJS:不是前端却革命了前端无名之辈一个有代码洁癖的前端小开发,热爱生活,追求极致​关注他 498人赞同了该文章摘要本系列文章旨在帮助学习者了解前端,主要覆盖前端的基础知识,但不深入讲解,定位为大而全并非细而精,适合非前端开发的同......
  • canvas+js接金币小游戏
    忙里偷闲,让UI小伙伴帮忙搞了几个图片元素,利用飞机大战代码进行修改,做个接金币小游戏~varcanvas=document.getElementById("canvas");varcontext=canvas.getContext("2d");varimgWidth=window.innerWidth;varimgHeight=window.innerHeigh......
  • nodejs的安装和环境配置
    安装nodejsWindows下载安装包下载地址:https://nodejs.org/zh-cn/download安装nodejs软件本次安装在D盘,路径D:\ProgramFiles\nodejs新建全局路径和缓存路径在nodejs的安装目录下,新建node_global和node_cache文件夹。配置nodejs的configprefix和cache路径使用管理......
  • js
    js书写位置标签内,head之间,link引进  html内部</body>上面  放在html底部的原因外部js:通过src引入外部js文件  内联:vue才学 ......
  • cnpm : 无法加载文件 C:\Program Files\nodejs\node_global\cnpm.ps1
    在win10上运行cnpm命令时出现:cnpm:无法加载文件C:\ProgramFiles\nodejs\node_global\cnpm.ps1,因为在此系统上禁止运行脚本。解决办法记录如下: 在powershell中执行Start-Processpowershell-VerbrunAs会提示授权,并以管理员身份运行powershell 继续重新执行set-Ex......
  • 【JS】实现 instanceOf
    https://github.com/zjy4fun/notes/tree/main/demos/js-instanceof原型就是一个对象,instanceof就是检查构造函数的原型是否在对象的原型链上 functionmyInstanceOf(obj,constructorFn){constprototype=constructorFn.prototypewhile(obj!==null){......
  • JSON.stringify和JSON.parse的用法和区别
    JSON.stringify()和JSON.parse()是JavaScript中用于处理JSON数据的方法,它们的用法和区别如下:####一:JSON.stringify()方法将JavaScript对象或值转换为JSON字符串。它接受一个参数,即要转换的对象或值。示例:varobj={name:'John',age:25};varjsonString=JSON.......