📔
饥人谷前端体系课程笔记
黑马程序员笔记前端面试押题前端精进
  • 课程大纲
  • Git入门
    • 3. 软件安装详解
    • 4. Mac环境搭建
    • 5. 命令行入门
    • 6. 本地仓库
    • 7. Git远程仓库-GitHub
  • HTML全解
    • 8. HTML概览
    • 9. HTML标签
    • 10. HTML重难点
    • 11. HTML实践 & 手机调试
  • CSS全解
    • 12. CSS基础
    • 13. CSS布局(上)
    • 14. CSS布局(下)
    • 15. CSS定位
    • 16. CSS动画
  • HTTP全解
    • 17. URL 是什么
    • 18. 请求和响应 & Node.js Server
  • JS全解
    • 19. JavaScript概览
    • 20. 内存图与JS世界(精品课)
    • 21. Canvas 实践—画图板
    • 22. JS语法
    • 23. JS数据类型
    • 24. JS 对象
    • 25. JS 对象分类
    • 26. JS 数组
    • 27. JS 函数
    • 28. JS 实战,会动的代码
    • 29. JS运算符
    • 30. JS总结
  • JS编程接口
    • 31. DOM编程
    • 32. 手写DOM库
    • 33. JQuery中的设计模式(上)
    • 34. JQuery中的设计模式(下)
    • 35. DOM事件与事件委托
  • 项目 前端导航站点
    • 前端导航项目笔记
  • 前后分离
    • 40. AJAX的原理
    • 41. 异步与Promise
    • 42. 跨域、CORS、JSONP
    • 43. 静态服务器
    • 44. AJAX实战:Cookie、Session
  • JS进阶MVC
    • 48. MVC(上)
    • 49. MVC(中)
    • 50. MVC(下)
  • 项目构建
    • 51. Webpack(上)
    • 52. Webpack(下)
  • 算法与数据结构
    • 62. 伪代码与流程图
  • React全解
    • 75. React起手式
    • 76. React类组件和函数组件
    • 77. Class组件详解
    • 78. 函数组件
    • 79. Hooks原理解析
    • 80. Hooks各个击破
    • 81. 精通Redux
  • Node.js
    • 84. Node.js技术架构
    • 85. 文件模块
    • 86. 单元测试之文件模块
    • 87. 调试 Node.js 程序
    • 88. 静态服务器
    • 89. 命令行翻译工具
    • 90. 操作数据库
    • 91. 数据库基础知识
    • 92. Stream 流
    • 93. child_process
    • 94. 总结
  • TypeScript
    • 112. 基础
    • 113. 泛型
  • Next.js全解
    • Next.js 上
    • Next.js 下
  • ES6精讲
    • Promise,async/await
  • 大屏可视化笔记
    • 大屏可视化项目
  • SCSS全解
    • SCSS全解
  • 拓展
    • 一次性弄懂性能优化
    • Web性能优化
由 GitBook 提供支持
在本页
  • 如何找素材
  • 著名的设计网站
  • 关键字
  • 工具
  • 如何适配屏幕
  • 算法
  • Rem计算公式
  • 用rem
  • 实践: 大屏适配
  • 实践: 用rem代替像素
  • 实践: 制作header
  • 使用Flex和Grid布局
  • 添加空隙
  • 制作背景和边框
  • 第一个图表
  • 如何布局
  • 使用Grid
  • 使用echarts
  • 优点
  • 缺点
  • 实时更新数据
  • 用法
  • 测试并修复bug
  • 认真对待
  • 部署

这有帮助吗?

  1. 大屏可视化笔记

大屏可视化项目

上一页大屏可视化笔记下一页SCSS全解

最后更新于2年前

这有帮助吗?

如何找素材

[TOC]

方方的最终成果展示

初始代码:

最终代码:

echarts theme builder:

著名的设计网站

Dribble,站酷

花时间找下素材就可以了。

关键字

大屏, big screen, dashboard

工具

取色工具

尺寸工具

如何适配屏幕

算法

W p={h 设备×169,w 设备h 设备>169w 设备,w 设备h 设备<=169}W~p = \left\{\begin{aligned} h~设备 \times \frac{16}{9}, \frac{w~设备}{h~设备} > \frac{16}{9}\\ w~设备, \frac{w~设备}{h~设备} <= \frac{16}{9} \end{aligned} \right\}W p=⎩⎨⎧​h 设备×916​,h 设备w 设备​>916​w 设备,h 设备w 设备​<=916​​⎭⎬⎫​
H p=W p÷169H~p = W~p \div \frac{16}{9}H p=W p÷916​

Wp为页面有效宽度,Hp为页面有效高度

以上公式解读:

  • 如果屏幕宽度大于16:9, 即屏幕很宽,屏幕宽度就是屏幕高度乘以16:9,比如说高度是900,那么宽度就是1600,因此高度就是宽度除以16:9

  • 如果屏幕宽度小于16:9,即屏幕很窄,那么宽度就是屏幕的宽度

如果屏幕很宽,页面左右居中,如果屏幕很高,页面就上下居中,四周留白即可

然后在head里用JS设置1rem = Wp / 100(下文中会用到)

Rem计算公式

用rem

Size页面W页面=Size设计W设计,W页面=100×rem\frac{Size页面}{W页面}=\frac{Size设计}{W设计}, W页面 = 100 \times remW页面Size页面​=W设计Size设计​,W页面=100×rem
Size页面=Size设计W设计×100×remSize页面 = \frac{Size设计}{W设计} \times 100 \times remSize页面=W设计Size设计​×100×rem

假设某div在设计稿中长100px,设计稿宽度1920px

那么该div在页面中长为100/1920 x 100rem

最后可以写一个px()函数来计算100px对应的rem

实践: 大屏适配

用ps截取工具可以轻松测量宽高像素

实践: 用rem代替像素

//helper.scss
@function px($n){
  @return $n / 2420 * 100rem;
}

//home.scss
@import "../shared/helper";
.x {
  width: px(367);
  height: px(315);
  border: 1px solid red;
}

实践: 制作header

在home.tsx下

import React from 'react';
import './home.scss';
import headerBg from '../images/header.png';

export const Home = () => {
  return (
    <div className="home">
      <header style={{backgroundImage: `url(${headerBg})`}}></header>
    </div>
  );
};

然后在home.tsx引入图片,此时会报错

import image from '../images/header.png'

需要在src下创建一个custom.d.ts文件,输入以下

declare module "*.png" {
	const value :any;
	export = value;
}

在home.scss文件下,添加background-size:cover,这样可以让图片完全盖住背景(无论页面大小如何转换)

.home {
  header{
  height: px(99);
  background-size:cover;
  }
}

使用Flex和Grid布局

技术总结:

  1. 在父元素上加display:flex 和flex-direction:column;

  2. 在子元素上加flex:1

即可让子元素的高度占满父元素

添加空隙

  grid-column-gap: px(28);
  grid-row-gap: px(28);

制作背景和边框

原始图片的边框是四角发光,使用box-shadow可以达到这种效果,box-shadow可以叠加使用如下面的代码

 box-shadow: 17px 0 0 -16px #0e325f,
        -17px 0 0 -16px #0e325f,
        0 17px 0 -16px #0e325f,
        0 -17px 0 -16px #0e325f,
        9px 0 0 -8px #0d4483,
        -9px 0 0 -8px #0d4483,
        0 9px 0 -8px #0d4483,
        0 -9px 0 -8px #0d4483,;

无意中看到一个很好看的配色方案

第一个图表

引入echarts

import * as echarts from 'echarts';

调用官网的例子

const divRef = useRef(null)
    useEffect(()=>{  /
        console.log(divRef.current);
        let myChart = echarts.init(divRef.current);
        myChart.setOption({
            textStyle: {
                fontSize: px(12),
                color: '#79839E'
            },
            title: {show: false},
            legend: {show: false},
            xAxis: {
                data: ['兰州新区', '兰州新区', '兰州新区', '兰州新区', '兰州新区', '兰州新区', '兰州新区', '兰州新区', '兰州新区'],
                axisTick: {show: false},
                axisLine: {
                    lineStyle: {color: '#083B70'}
                },
                axisLabel: {
                    fontSize: px(12),
                    formatter(val) {
                        if (val.length > 2) {
                            const array = val.split('');
                            array.splice(2, 0, '\n');
                            return array.join('');
                        } else {
                            return val;
                        }
                    }
                },
            },
            grid: {
                x: px(40),
                y: px(40),
                x2: px(40),
                y2: px(40),
            },
            yAxis: {
                splitLine: {show: false},
                axisLine: {
                    show: true,
                    lineStyle: {color: '#083B70'}
                },
                axisLabel: {
                    fontSize: px(12)
                }
            },
            series: [{
                type: 'bar',
                data: [10, 20, 36, 41, 15, 26, 37, 18, 29]
            }]
        });
    }, []);

如何布局

使用Grid

理由1: 大屏一般是可控的,可以装Chrome

理由2: Grid布局太方便了,行,列,间隙都可控

使用echarts

优点

开发效率高

缺点

可定制性一般

实时更新数据

用setTimeout或者setInterval,让数据动起来

用法

重新设置echart的option即可

测试并修复bug

认真对待

如果你把这个项目写到自己的简历,请按照方方的教程做完之后,自己再重新做一次,然后换个皮肤防止撞车,并仔细测试是否有bug,有就修复或隐藏它

部署

自己开发用

yarn dev

给别人/面试官看的

yarn build --base ./

打包完成后,会出现一个dist目录, 里面就两个东西,一个assets目录和一个index.html

方方这边推荐用gitee 码云

cd dist
git init
git add .
git commit -m deploy
git remote add origin xxxxx
git push -u origin master

gitee的pages,直接启动即可,选择https

简历示例参考

技术栈:React、ReactRouter、Echarts

这个项目是我在学习前端可视化与 echarts 时,仿照方应杭的开源项目制作而成的。 页面布局使用了 Grid 和 Flex 布局,为了适应所有屏幕,我使用了动态 rem 方案,具体思路见我的博客(这里应给出链接)。 项目中包含的图例有柱形图、折线图、饼图、地图和表格等,并且所有图例都可以实时更新数据并辅以动画交互。 通过这个项目,我掌握了大屏可视化项目的制作技巧。

img202203121756404
Screen Shot 2022-03-12 at 5.56.07 PM

src文件夹下创建一个image文件夹,然后把header.png拖进去,文件在

Screen Shot 2022-03-13 at 10.22.45 PM
Screen Shot 2022-03-13 at 10.23.05 PM
https://frankfang.gitee.io/test-20210000001/#/
https://github.com/FrankFang/WgGRGvfAVyp5
https://github.com/FrankFang/U6rda2laBInU
https://echarts.apache.org/en/theme-builder.html
常用latex符号公示
https://github.com/FrankFang/F4rp82vr0tYn/tree/master/src/images