怎么样能保证vue项目pc端整体缩放到移动端布局不变

vue写的pc端项目缩放到手机端整体布局不变


前言

vue写的pc端项目缩放到手机端整体布局不变:

一、解决方法如下:

这里写的是针对vue2的版本,使用lodash插件实现屏幕移动端自适应。

二、使用步骤

1.安装lodash插件

npm i lodash -S
2.在app.vue中导入
import _ from 'lodash'
3.在app的容器绑定ref=‘app’
<template>
    <div id="app" ref="app">
      <router-view />
    </div>
</template>
4.然后在mounted使用如下方法(其中的1080以及1920为定义的画布尺寸):
mounted() {

    this.$nextTick(() => {
      const $app = this.$refs.app
      const standardScale = 1080 / 1920

      window.addEventListener(
          'resize',
          _.debounce(function () {
            const docHeight = document.body.clientHeight
            const docWidth = document.body.clientWidth
            if (docWidth < 1920) {
              const currentScale = docHeight / docWidth
              let [scale, translate] = [0, 0]
              if (currentScale < standardScale) {
                // 以高度计算
                scale = docHeight / 1080
                const shouleWidth = 1920 * scale
                const offsetWidth = docWidth - shouleWidth
                console.log('6666')
                translate = offsetWidth > 0 ? `translate(${offsetWidth / 2}px, 0)` : ''
              } else {
                // 以宽度计算
                scale = docWidth / 1920
                const shouleHeight = 1080 * scale
                const offsetHeight = docHeight - shouleHeight
                translate = offsetHeight > 0 ? `translate(0, ${offsetHeight / 2}px)` : ''
              }
              $app.style.cssText = `
            transform: scale(${scale});
            transform-origin: top left;
            width: 1920px;
            min-height: 1080px;
          `
            } else {
            //适配1920以上的分辨率
              let [scale, translate] = [0, 0]
              // 以宽度计算
              scale = docWidth / 1920
              const shouleHeight = 1080 * scale
              const offsetHeight = docHeight - shouleHeight
              translate = offsetHeight > 0 ? `translate(0, ${offsetHeight / 2}px)` : ''
              $app.style.cssText = `
            transform: scale(${scale});
            transform-origin: top left;
            width: 1920px;
            min-height: 1080px;
          `
            }
          }),
          300
      )

      if (document.createEvent) {
        var event = document.createEvent('HTMLEvents')
        event.initEvent('resize', true, true)
        window.dispatchEvent(event)
      } else if (document.createEventObject) {
        window.fireEvent('onresize')
      }
    })

  },

5.此处最让你头疼的是页面是缩小了,但是上下有空白,我们只需要把这个属性删掉就行,如下图

在这里插入图片描述


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

herry-弟弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值