Echarts饼图-实现今日进度-动态图

效果预览

本次实现的是一个饼图,蓝色科技背景色,星球转动效果 + 进度显示。

GIF 2024-6-21 16-20-50

构建一个动态饼图,采用ECharts,背景为蓝色科技风,有星球转动效果。通过echarts.init初始化,设置图表尺寸和背景色,配置option对象含标题、颜色等。利用series定义渐变色并自定义渲染,通过renderItem绘制弧线和圆点。getCirlPoint函数计算坐标,draw函数更新角度实现动画。代码包括图表初始化、系列配置、动画逻辑等关键部分。完整代码可在链接处下载。

实现思路

大致实现思路:

  1. 初始化 ECharts 实例: 使用 echarts.init 方法初始化图表,并将其绑定到页面上的一个元素。
  2. 定义样式和尺寸: 设置图表容器 .EChartBox 的宽度和高度,以及图表的背景色。
  3. 配置图表选项: 创建一个 option 对象,配置图表的标题、图例、提示框、颜色等。
  4. 设置标题: 使用 title 字段定义图表标题的样式和位置。
  5. 隐藏图例和提示框: 设置 legendtooltipfalse 或相应的配置以隐藏或自定义显示。
  6. 定义颜色数组: 使用 colors 数组定义图表使用的颜色。
  7. 创建渐变色: 定义 innerRingColor 对象来创建渐变色效果,这将应用于饼图的一部分。
  8. 配置系列(Series): 在 series 数组中定义多个系列,每个系列代表饼图的一部分或一个特定的视觉效果。
  9. 自定义渲染: 使用 renderItem 方法自定义绘制饼图的某些部分,例如绘制弧线和圆点。
  10. 计算圆上点的坐标: 实现 getCirlPoint 函数,根据圆心坐标、半径和角度计算圆上点的坐标。
  11. 实现动画效果: 创建 draw 函数来更新图表的角度 angle,使用 setInterval 定时调用 draw 函数来实现旋转动画。
  12. 设置图表选项: 使用 myChart.setOption 方法应用配置项到图表。
  13. 启动动画: 在页面加载完成后,首先调用 draw 函数一次,然后使用 setTimeout 延迟启动动画循环。
  14. 停止动画: 在动画不需要时,可以清除 setInterval 设置的定时器。

整体来看,代码实现了一个具有动画效果的图表,其中包含了多个自定义系列,用于展示不同类型的请假天数。图表的图例根据 series 中的 name 自动生成,并通过 legend 配置项进行样式设置。动画效果通过改变角度 angle 并重新设置图表选项来实现。

关键代码展示

在您提供的代码中,关键部分主要涉及 ECharts 图表的初始化、配置和动画效果的实现。以下是关键代码的总结:

1. 图表初始化

var myChart = echarts.init(document.getElementById('ECharts'));

2. 配置项设置

let option = {
    // ... 全局配置项,如标题、图例、提示框等
    series: [
        // ... 系列数据配置
    ]
};

3. 饼图系列配置

series: [
    {
        name: '',
        type: 'pie',
        // ... 其他饼图配置
        data: [
            // ... 数据项
        ],
        label: {
            // ... 标签配置
        },
    },
    // ... 其他系列配置
]

4. 自定义渲染函数 renderItem

{
    name: 'ring5',
    type: 'custom',
    coordinateSystem: 'none',
    renderItem: function (params, api) {
        // ... 绘制弧线或圆点的逻辑
    },
    data: [0],
},

5. 计算圆上点的坐标的辅助函数

function getCirlPoint(x0, y0, r, angle) {
    let x1 = x0 + r * Math.cos((angle * Math.PI) / 180);
    let y1 = y0 + r * Math.sin((angle * Math.PI) / 180);
    return {
        x: x1,
        y: y1,
    };
}

6. 动画效果实现

function draw() {
    angle = angle + 3; // 更新角度
    myChart.setOption(option, true); // 应用配置项更新图表
}

// 启动动画
draw();
setTimeout(function () {
    timerId = setInterval(function () {
        draw();
    }, 100);
}, 500);

7. 应用配置项到图表

myChart.setOption(option);

这些关键代码片段概述了如何使用 ECharts 创建一个带有动画效果的饼图。动画通过改变角度 angle 并重新设置图表选项来实现。自定义渲染函数 renderItem 允许开发者绘制自定义图形,如弧线和圆点。辅助函数 getCirlPoint 用于计算圆上点的坐标,这对于绘制弧线和圆点至关重要。

完整代码

点我下载完整

好的,关于echarts动态数据饼状图,你可以参考以下步骤: 1. 引入echarts库和相关的主题库 2. 创建一个div容器,设置宽高 3. 初始化echarts实例 4. 配置饼状图的基本参数,如标题、颜色、半径等 5. 定义一个定时器,每隔一段时间更新数据 6. 更新数据后重新渲染图表 以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Echarts动态数据饼状图</title> <!-- 引入echarts库和主题库 --> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/theme/macarons.js"></script> </head> <body> <!-- 创建一个div容器 --> <div id="pie" style="width: 600px;height:400px;"></div> <script> // 初始化echarts实例 var myChart = echarts.init(document.getElementById('pie'), 'macarons'); // 配置饼状图的基本参数 var option = { title: { text: '动态数据饼状图', left: 'center' }, tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, legend: { orient: 'vertical', left: 10, data: ['数据1', '数据2', '数据3', '数据4', '数据5'] }, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ {value: 335, name: '数据1'}, {value: 310, name: '数据2'}, {value: 234, name: '数据3'}, {value: 135, name: '数据4'}, {value: 1548, name: '数据5'} ] } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); // 定义一个定时器,每隔一段时间更新数据 setInterval(function () { // 模拟新的数据 var newData = [ {value: Math.random() * 500, name: '数据1'}, {value: Math.random() * 500, name: '数据2'}, {value: Math.random() * 500, name: '数据3'}, {value: Math.random() * 500, name: '数据4'}, {value: Math.random() * 500, name: '数据5'} ]; // 更新数据后重新渲染图表 myChart.setOption({ series: [{ data: newData }] }); }, 2000); // 每隔2秒更新一次数据 </script> </body> </html> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

usp1994

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值