数据大屏优化——屏幕适配解决方案

379 阅读2分钟

1.使用vw和vh单位

将全屏盒子的宽高分别设为100vw和100vh,将px按比例计算转为vw和vh。也可自己封装css和js,自定义公共转换函数计算。

优点:可以动态计算图表宽高,字体等,灵活度较高。且不会出现四周留白情况。
缺点:计算麻烦。需要编写自定义转换函数,为每个图表都单独做字体、间距、位移的适配。

2.使用css3的transform属性scale

通过固定定位和js计算比例,实现大屏数据根据屏幕尺寸动态放大缩小,保持原型稿设计比例。也是主流适配方案,可直接引入第三方组件vue2/3-scale-box。

vue2版本:www.npmjs.com/package/vue…
vue3版本:www.npmjs.com/package/vue…

实现原理: 将全屏盒子宽高直接设置为100vw和100vh,背景图铺满。开启固定定位,将left和right设置为50%,并将缩放基点设置为视口左上,确保内容居中显示。Js定义大屏缩放比例,实现动态缩放。

基本代码:

    .container {
        width: 100%;
        height: 100%;
        background: url(...) no-repeat;
        background-size: cover;
    }

    .screen {
        position: fixed;
        width: 1920px;
        height: 1080px;
        left: 50%;
        top: 50%;
        transform-origin: left top;
    }
    let screen=ref();
    onMounted(() => {
        screen.value.style.transform=`scale(${getScale()}) translate(-50%,-50%)`
    })// 设置屏幕元素的transform样式,缩放比例和位置

    //计算大屏缩放比例
    function getScale(w = 1920,h = 1080) {
        const ww = window.innerWidth / w;
        const wh = window.innerHeight / h;
        return ww < wh ? ww : wh;//宽度过大就以高度为基准;高度过大就以宽度为基准。
    }

    //监听视口变化 
    window.onresize = ()=>{
        screen.value.style.transform=`scale(${getScale()}) translate(-50%,-50%)`
    }// 更新屏幕元素的transform样式,重新计算缩放比例和位置

优点:代码量少,适配简单。
缺点:因为是根据原比例等比缩放,所以当视口比例与原比例不同时,上下或两侧会留白。

3.使用rem+vw vh

1.获取rem的基准值。
2.动态计算html根元素的font-size。
3.图表中通过vw vh动态计算字体、间距、位移等。

优点:布局的自适应代码量较少,适配简单。
缺点:因为是根据原比例等比缩放,所以当视口比例与原比例不同时,上下或两侧会留白。且图表需要做单个字体、间距、位移的适配。