• Echarts图表,防抖+自适应。


    Echarts图表库还是很好使的,就是在网页屏幕大小变化大时候,图表还是不变,这就让人很苦恼!

    我看大部分网上的都是用的定时器,但是我参考别人的代码,没有效果,就自己想了一个比较原始的代码

     template部分

    创建用来展示图表的div

    1. <template>
    2. <div id="columnar" style="width: 100%; height: 100%">div>
    3. <div id="piegirl" style="width: 230px; height: 143px">div>
    4. <div id="pieman" style="width: 230px; height: 143px">div>
    5. template>

    JS部分

    1、我用的是按需引入自己封装了echarts.js文件

    1. // 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
    2. import * as echarts from "echarts/core";
    3. /** 引入柱状图and折线图图表,图表后缀都为 Chart */
    4. import { BarChart, LineChart, PieChart } from "echarts/charts";
    5. // 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
    6. import {
    7. TitleComponent,
    8. TooltipComponent,
    9. GridComponent,
    10. DatasetComponent,
    11. TransformComponent,
    12. LegendComponent
    13. } from "echarts/components";
    14. // 标签自动布局,全局过渡动画等特性
    15. import { LabelLayout, UniversalTransition } from "echarts/features";
    16. // 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
    17. import { CanvasRenderer } from "echarts/renderers";
    18. // 注册必须的组件
    19. echarts.use([
    20. TitleComponent,
    21. LegendComponent,
    22. PieChart,
    23. TooltipComponent,
    24. GridComponent,
    25. DatasetComponent,
    26. TransformComponent,
    27. BarChart,
    28. LabelLayout,
    29. UniversalTransition,
    30. CanvasRenderer,
    31. LineChart,
    32. ]);
    33. // 导出
    34. export default echarts;

    2、接下来是代码运用,展示图表

    1. import { onMounted, ref, onUnmounted } from "vue";
    2. import echarts from "../../../assets/echarts.js";
    3. //定义Echarts
    4. const charColumn = ref();
    5. const charPiegirl = ref();
    6. const charPieman = ref();
    7. //定义图表的展示数据
    8. const tableData = ref([
    9. {
    10. CreatedAt: "计科",
    11. man: "16",
    12. girl: "24",
    13. name: "pang",
    14. },
    15. {
    16. CreatedAt: "数据",
    17. man: "16",
    18. girl: "24",
    19. name: "pang",
    20. },
    21. {
    22. CreatedAt: "物联",
    23. man: "16",
    24. girl: "24",
    25. name: "pang",
    26. },
    27. {
    28. CreatedAt: "信工",
    29. man: "16",
    30. girl: "24",
    31. name: "pang",
    32. },
    33. {
    34. CreatedAt: "通信",
    35. man: "16",
    36. girl: "24",
    37. name: "pang",
    38. },
    39. ]);
    40. //和上面一样,图表的展示数据,所有我就不写啦!
    41. const columnardata = ref({});
    42. const piedata = ref({});
    43. //屏幕大小变化重新加载
    44. window.addEventListener("resize", () => {
    45. if (charColumn.value) {//如果有这个图表实例就进行销毁
    46. charColumn.value.dispose();
    47. charPiegirl.value.dispose();
    48. charPieman.value.dispose();
    49. // dispose(),Echarts自带的销毁图表实例的方法
    50. echartsResize();
    51. }
    52. });
    53. const echartsResize = () => {
    54. // 使用刚指定的配置项和数据显示图表。
    55. charColumn.value = echarts.init(document.getElementById("columnar"));
    56. charPiegirl.value = echarts.init(document.getElementById("piegirl"));
    57. charPieman.value = echarts.init(document.getElementById("pieman"));
    58. if (charColumn.value && charPiegirl.value && charPieman.value) {
    59. //都存在的时候进行图表渲染
    60. // 使用刚指定的配置项option和数据显示图表。
    61. charColumn.value.setOption(columnardata.value);
    62. charPiegirl.value.setOption(piedata.value);
    63. charPieman.value.setOption(piedata.value);
    64. }
    65. };
    66. onMounted(() => {
    67. echartsResize();//调用方法渲染图表
    68. });
    69. onUnmounted(() => {
    70. //切换页面的时候销毁图表
    71. if (charColumn.value) {
    72. charColumn.value.dispose();
    73. charPiegirl.value.dispose();
    74. charPieman.value.dispose();
    75. }
    76. });

  • 相关阅读:
    引领未来:AI Native与物联网(IoT)的革命性融合
    [暑假]Vue组件化编程
    计算机毕业设计ssm校园花卉销售系统ef5ox系统+程序+源码+lw+远程部署
    【libGDX】初识libGDX
    mosquitto使用的基本流程以及一些遇见的问题
    接口间调用为什么要用json、fastjson怎么赋值的、fastjson 1.2.83@JSONField映射关系问题
    【c++】多态
    C语言学习——指针
    大数据-Big Data(二):核心技术详解
    PAT 甲级 A1003 Emergency
  • 原文地址:https://blog.csdn.net/m0_66570642/article/details/134053901