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

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

  • 1、环境
  • 2、js代码
  • 3、代码解释
    • 1、定义对象
    • 2、定义方法
    • 3、监听窗口变化,计算比例值,并赋值给transform 属性
    • 4、实现监听
  • 3、html 代码
  • 4、特别注意

1、环境

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

2、js代码




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 代码


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

4、特别注意

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

你可能感兴趣的:(前端,vue,javascript,前端,css)