vue2实现浏览器大小变动页面缩放功能

该文章介绍了一种方法来实现页面内容随浏览器窗口大小变化而缩放。通过CSS的scale方法,配合Vue2的ref属性获取元素,监听window.resize事件动态调整页面元素的缩放比例。内容使用rem、px等单位以避免不同分辨率下的排版问题。同时,利用js函数节流处理resize事件,保证性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要实现根据浏览器大小变化从而页面内容同样缩放思想实现:1.使用css中的scale缩放方法。2.通过window.addEventListener添加resize监听方法,监听尺寸变化从而调用缩放相关方法。3.通过vue2的 ref 在页面html部分获取元素对象(这个一般设置在页面div的第二层)。4.页面具体内容的宽高最好设置rem、px、em这样的具体属性,如果设置%、vw/vh 这样按比例的属性会导致在不同分辨率下的排版出现问题(比如1920跟1366)。
html部分主要内容:

<div class="page-wrap">
    <div ref="screen-wrap" class="page">
     <div class="title"></div>
     <div class="content-box">
			<div class="left"></div>
			<div class="center"></div>
			<div class="right"></div>
	</div>
    </div>
</div>

CSS部分主要内容:

.page-wrap {
  position: relative;
  width: 100vw;
  height: 100vh;
  overflow: hidden;
  background-color: #030a1d;
  background-image: linear-gradient(to bottom, #001C42, #001D43);
}
.page {
  background: url('../../assets/imgs/bg.png') no-repeat;
  left: 50%;
  top: 50%;
  transform-origin: left top;
  transform: translate(-50%, -50%);
  background-size: 100% 100%;
  width: 1920px;
  height: 1080px;
  position: absolute;
  display: flex;
  flex-direction: column;
}
//上面主要部分
.content-box {
    display: flex;
    .left {
      box-sizing: border-box;
      width: 0;
      flex: 0 0 378px;
      margin: 29.16px 19.2px 0 19.2px;
      overflow: hidden;
    }
    .center {
      width: 0;
      flex: 1;
    }
  }

JS主要部分代码:

throttle(fn, delay) {
      var timer = null
      return function() {
          var context = this, args = arguments
          clearTimeout(timer)
          timer = setTimeout(function() {
            fn.apply(context, args)
          }, delay)
      }
    },
    /**
     * @description 监控浏览器尺寸变化
     */
     setScale() {
      const app = this.$refs['screen-wrap']
      const baseWidth = 1920
      const baseHeight = 1080
      const baseRate = parseFloat((baseWidth / baseHeight).toFixed(5))
      const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
      if (currentRate > baseRate) {
        // 实际屏幕比基准更宽
        const rate = (window.innerHeight / baseHeight).toFixed(5)
        app.style.transform = `scale(${rate}, ${rate}) translate(-50%, -50%)`
      } else {
        // 实际屏幕比基准更高
        const rate = (window.innerWidth / baseWidth).toFixed(5)
        app.style.transform = `scale(${rate}, ${rate}) translate(-50%, -50%)`
      }
    },
/**
在mounted生命周期方法中触发监听缩放方法
*/
mounted() {
    window.addEventListener('resize', this.throttle(() => {
      this.setScale()
    }, 300));
    this.setScale();
}

ref 改成id 再通过document.getElementById获取操作应该也是一样的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值