前端css + js +vue +element-ui 实现响应式布局,根据浏览器窗体大小自动响应

1、环境

我的环境是element-ui vue版的,其他的也可以,主要是css和js的内容

2、js代码

<script>
export default {
  data() {
    return {
      scaledStyle: {
        transform: '',
        "transform-origin": "left",
      },
    }
  },
  mounted() {
    this.$nextTick(()=> {
      this.updateScaledStyle()
    })
    window.addEventListener('resize', this.updateScaledStyle)
  },
  methods: {
    updateScaledStyle() {
      let innerWidth =  window.innerWidth
      const scaleX = innerWidth / 1920;
      this.scaledStyle.transform = `scale(${scaleX},1)`;
    }
}
</script>


3、代码解释

1、定义对象

首先在data中定义一个对象

 scaledStyle: {
        transform: '',
        "transform-origin": "left",
      },

其实就是css的样式,不过放在了js 里面而已
这里css设置了两个属性
一个是transform
这个属性对div标签的缩放作用,当浏览器窗口或者屏幕大小改变时,就调整这个属性的值,来等比缩放标签的布局。
另一个是transform-origin
这个属性是设置div标签缩放的圆点位置,也就是以什么位置为圆点缩放的,默认是中间点,但是很多时候以中间点作为圆点缩放是不合理的,根据自己的实际需求设置,我这里设置以左边为圆点缩放,就是当窗口页面变化时,左边不动,右边往左边缩放靠拢。

2、定义方法

其次是

methods: {
    updateScaledStyle() {
      let innerWidth =  window.innerWidth
      const scaleX = innerWidth / 1920;
      this.scaledStyle.transform = `scale(${scaleX},1)`;
    }
}

这里就是在methods里面定义一个方法,监听窗体的变化,然后计算该缩放多少倍。
window.innerWidth 是获取当前窗口的宽度,window里面还有其他属性,例如 innerHeight 获取窗口的高度等,我这里值改变窗口的宽度,所以获取高度。
const scaleX = innerWidth / 1920; 这个是计算缩放的比例,1920是自己定的,就看正常不缩放时窗口的宽度是多少,如果时1080,那就设置1080,当然也可以是页面的某个div,我这里是整个页面。
说白了就是原始不缩放时的宽高。

3、监听窗口变化,计算比例值,并赋值给transform 属性

最后就是

this.scaledStyle.transform = `scale(${scaleX},1)`;

这里其实就是给transform 属性赋值,transform 属性可以赋两个值,也就是x,y值,横边缩放和竖边缩放,这两个值是这样赋值的 scale(0.7,0.8),这就是横向缩小为原来的0.7倍,竖向缩小为原来的0.8倍。
我这里竖向不缩放所以直接写1,横向是根据当前的窗口宽度和原来的比,得到一个比例值决定缩小还是放大的。

4、实现监听

 mounted() {
    this.$nextTick(()=> {
      this.updateScaledStyle()
    })
    window.addEventListener('resize', this.updateScaledStyle)
  },

mounted 是vue生命周期中载入后执行的,但是这里还没有渲染dom,获取不到dom。
意思就是获取不到宽高,所以这里加了一个nextTick获取到下一个更新的dom,以保证能够获取到dom。
获取到dom之后去执行更新方法updateScaledStyle
最后一句 window.addEventListener(‘resize’, this.updateScaledStyle) 就是将 updateScaledStyle方法加入到监听事件中,resize 是监听窗口的额变化,然后执行updateScaledStyle方法,起到窗口变化,同时缩放div的效果

3、html 代码

<template>
  <div  :style="scaledStyle">
	// 其他内容
  </div>
</template>

这里html的代码就简单了,就是定义一个div标签,一个动态的样式。

4、特别注意

这里div里面的所有样式不能用%,例如宽5%,高10%这些百分比的样式。
不然缩放的事样式按百分比缩放会乱。
这是我遇到的问题,你们可以试一下。
个人觉得它这个缩放其实是把div下的所有内容当做一张图一样来缩放,所以你在里面写的固定px值也会跟着缩放。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值