大屏可视化项目的实现

158 阅读2分钟

使用 rem 和 px 函数适配各种屏幕

计算方法

1.png

由于我们的设计方案为16:9页面,所以判断屏幕宽高,以计算出页面宽高。
如果 屏幕宽度/屏幕高度 > 16/9, 那么页面宽度 = 屏幕高度 * (16/9),否则页面宽度 = 屏幕宽度
页面高度就等于 页面宽度/ (16/19)

  • 左右居中{margin:0 auto;}
  • 上下居中: (屏幕高度 - 页面高度)/2

响应式页面不能使用像素问题

  • 那就使用 rem 2.png
  • 设置 html的font-size 为 页面宽度/100
const string = `<style>html{font-size: ${pageWidth/100}px}</style>` document.write(string)
//表示1rem的宽度

假设某 div 在设计稿中长 100px,设计稿宽度 1920px,
那么该 div 在页面中长为 100/1920 X 100rem
最后可以写一个 px() 函数来计算 100px 对应的 rem

@function px($n) {
  @return $n / 2420 *100rem;
}
//2420为设计稿宽度

使用 grid 布局

main{
  display: grid;
  grid-template:
      "box1 box2 box4 box5" 755fr
      "box3 box3 box4 box5" 363fr / 366fr 361fr 811fr 747fr; 
      //表示各个分区的排列方法以及宽高布局
    grid-column-gap: px(28);
    //表示列之间的间隔宽度
    grid-row-gap: px(28);
    //表示行之间的间隔宽度
 }
 .section1 {
     grid-area: box1;
     }
  .section2 {
     grid-area: box2;
     }
     ...

使用 echarts

引入方法可以根据 echarts文档使用

xAxis: {
        axisTick: {show: false},//坐标轴刻度是否显示
        axisLabel: { //坐标轴刻度标签
          margin: px(8), //标签与轴的距离
          lineHeight: px(15), //标签文本行间距
          formatter(val) {   //刻度标签的内容格式器,可以调用函数
            if (val.length > 2) {
              const array = val.split('');
              array.splice(2, 0, '\n');
              return array.join('');
            } else {
              return val;
            }
          }
        },
      }

饼图的使用

 series: [
        {
          radius: ['75%', '90%'], 
          //内圈大小,外圈大小(只写一个数据就只有一个圈)
          avoidLabelOverlap: false,//是否防止标签间的重叠。
          label: {
            show: true, position: 'inside', textStyle: {color: 'white', fontSize: px(20)}, //标签的位置大小颜色
            edgeDistance: '10%', alignTo: 'edge',
            //文字边距,但由于echarts设置问题,边距调到最小,标签也不能离饼图太近
            formatter(options) {
              return (options.value * 100).toFixed(0) + '%';
              //.toFixed(0) 防止%数据过长问题
            }
          },
        }
      ]

各种echarts图使用方法可查看官方示例或者术语速查手册