vue 项目适配

vue 项目适配

使用px单位未做适配的项目改造方案

以1920*1080设计图为例:

核心是根据页面的宽度除以1920,然后设置body的zoom属性

 mounted () {
    this.bodyScale()
  },
 
//method中
bodyScale () {
   //获取当前分辨率下的可是区域宽度
  var devicewidth = document.documentElement.clientWidth
  var scale = devicewidth / 1920 // 分母——设计稿的尺寸
  document.body.style.zoom = scale//放大缩小相应倍数
}

对于大屏可视化适配方案

主要是横向和纵向不要有滚动条

  • 新建工具drawMixin.js
// 屏幕适配 mixin 函数
 
// * 默认缩放值
const scale = {
  width: '1',
  height: '1',
}
 
// * 设计稿尺寸(px)
const baseWidth = 1920
const baseHeight = 1080
 
// * 需保持的比例(默认1.77778)
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
 
export default {
  data() {
    return {
      drawTiming: null
    }
  },
  mounted () {
    this.calcRate()
    window.addEventListener('resize', this.resize)
  },
  beforeDestroy () {
    window.removeEventListener('resize', this.resize)
  },
  methods: {
    calcRate () {
      const appRef = this.$refs["appRef"]
      if (!appRef) return 
      // 当前宽高比
      const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
      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%)`
        }
      }
    },
    resize () {
      clearTimeout(this.drawTiming)
      this.drawTiming = setTimeout(() => {
        this.calcRate()
      }, 200)
    }
  },
}
  • 在根组件如app.vue或index.vue文件(页面最外层的标签)写入以下代码

app.vue

<template>
	<div id="app" ref="appRef">
		<router-view />
	</div>
</template>

<script>
import drawMixin from "@/utils/drawMixin"
export default {
    mixins: [drawMixin],
	data() {
		return {};
	},
	created() {
	
	},
};
</script>

<style>
// 这一步很重要,具体标签名根据自己项目来,就是页面居中,脱离文档流,加一个溢出隐藏,就不会出现滚动条了。
#app {
  width: 1920px;
  height: 1080px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  transform-origin: left top;
  overflow: hidden;
}
</style>

Vue移动端项目中进行适配,可以采用以下方法: 1. 使用viewport进行适配:在HTML的head标签中添加以下meta标签,用于设置viewport: ```html <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> ``` 这样可以让页面根据设备的宽度进行自适应,并禁用用户缩放。 2. 使用CSS的媒体查询:通过媒体查询来针对不同设备的屏幕宽度设置不同的样式。例如,可以根据设备宽度调整字体大小、元素间距等。示例: ```css @media screen and (max-width: 768px) { /* 在宽度小于等于768px的设备上应用的样式 */ body { font-size: 14px; } } ``` 3. 使用rem单位进行相对长度设置:rem单位是相对于根元素(html元素)的字体大小来计算的。通过设置根元素的字体大小,可以实现基于屏幕宽度的自适应。在CSS中使用rem单位来设置元素的尺寸,而不是固定像素值。示例: ```css html { font-size: 16px; /* 根据设计稿和设备屏幕大小设置合适的基准字体大小 */ } .container { width: 10rem; /* 根据设计稿中的尺寸来设置 */ } ``` 4. 使用CSS预处理器的mixin或函数:如果您使用的是CSS预处理器(如Sass、Less等),可以使用mixin或函数来简化适配的过程。通过编写通用的适配样式代码,可以根据需要在不同地方引用,减少重复的代码。 通过以上方法,您可以实现Vue移动端项目适配,让页面在不同设备上有更好的显示效果。同时,还可以结合移动端调试工具,如Chrome开发者工具的设备模拟功能,来测试和调整页面的适配效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值