前端组件库——Chart.js知识点大全(二)

简介: 教程来源 http://xcfsr.cn Chart.js提供8种核心图表:折线图(趋势分析)、柱状图(类别对比)、饼/环形图(占比展示)、极地区域图、雷达图(多维评估)、散点/气泡图(变量关系)。支持动态更新、性能优化、图片导出及移动端触摸交互,开箱即用,覆盖主流业务场景。

三、核心图表类型

Chart.js提供了8种开箱即用的核心图表类型,覆盖了绝大多数业务场景。

3.1 折线图(Line Chart)
适用场景:展示数据随时间变化的趋势,如股票价格、网站流量、温度变化等。

new Chart(ctx, {
    type: 'line',
    data: {
        labels: ['1月', '2月', '3月', '4月', '5月'],
        datasets: [{
            label: '2024年销售额',
            data: [65, 59, 80, 81, 56],
            borderColor: 'rgb(75, 192, 192)',
            backgroundColor: 'rgba(75, 192, 192, 0.2)',
            tension: 0.3,      // 曲线弯曲程度,0为折线,1为最大弯曲
            fill: true,
            pointRadius: 5,    // 数据点半径
            pointHoverRadius: 8
        }]
    },
    options: {
        responsive: true,
        maintainAspectRatio: false[citation:4],
        scales: {
            y: {
                beginAtZero: true[citation:2]
            }
        }
    }
});

3.2 柱状图(Bar Chart)
适用场景:对比不同类别的数据差异,如不同产品的销量、不同部门的绩效等。

new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ['产品A', '产品B', '产品C', '产品D'],
        datasets: [{
            label: '销量(件)',
            data: [120, 200, 150, 80],
            backgroundColor: [
                'rgba(255, 99, 132, 0.5)',
                'rgba(54, 162, 235, 0.5)',
                'rgba(255, 206, 86, 0.5)',
                'rgba(153, 102, 255, 0.5)'
            ],
            borderColor: [
                'rgb(255, 99, 132)',
                'rgb(54, 162, 235)',
                'rgb(255, 206, 86)',
                'rgb(153, 102, 255)'
            ],
            borderWidth: 1
        }]
    }
});

3.3 饼图/环形图(Pie / Doughnut Chart)
适用场景:展示各部分占总体的比例,如市场份额、预算分配等。饼图(Pie)和环形图(Doughnut)的区别在于环形图中心是空的,可以用于放置额外的文本信息。

new Chart(ctx, {
    type: 'doughnut',  // 环形图;若为饼图则用'pie'
    data: {
        labels: ['电商', '实体店', '直播带货', '其他'],
        datasets: [{
            data: [350, 280, 190, 80],
            backgroundColor: [
                'rgb(255, 99, 132)',
                'rgb(54, 162, 235)',
                'rgb(255, 206, 86)',
                'rgb(75, 192, 192)'
            ],
            hoverOffset: 4      // 悬停时扇区偏移量
        }]
    },
    options: {
        plugins: {
            legend: {
                position: 'bottom',     // 图例位置[citation:4]
                labels: {
                    font: { size: 14 }
                }
            },
            tooltip: {
                callbacks: {
                    label: (context) => {
                        const total = context.dataset.data.reduce((a,b) => a + b, 0);
                        const percent = ((context.raw / total) * 100).toFixed(1);
                        return `${context.label}: ${context.raw} (${percent}%)`;
                    }
                }
            }
        }
    }
});

3.4 极地区域图(Polar Area Chart)
适用场景:展示多维度的对比数据,每个扇区代表一个维度,半径长度代表数值大小。

new Chart(ctx, {
    type: 'polarArea',
    data: {
        labels: ['速度', '力量', '技巧', '耐力', '智力'],
        datasets: [{
            data: [11, 16, 7, 3, 14],
            backgroundColor: [
                'rgb(255, 99, 132)',
                'rgb(75, 192, 192)',
                'rgb(255, 205, 86)',
                'rgb(201, 203, 207)',
                'rgb(54, 162, 235)'
            ]
        }]
    }
});

3.5 雷达图(Radar Chart)
适用场景:显示多个变量的综合对比,常用于性能评估、能力模型等。

new Chart(ctx, {
    type: 'radar',
    data: {
        labels: ['效率', '准确性', '创新', '沟通', '领导力'],
        datasets: [{
            label: '员工A',
            data: [85, 90, 80, 88, 75],
            backgroundColor: 'rgba(54, 162, 235, 0.2)',
            borderColor: 'rgb(54, 162, 235)',
            pointBackgroundColor: 'rgb(54, 162, 235)'
        }]
    }
});

3.6 散点图/气泡图(Scatter / Bubble Chart)
散点图:用于展示两个变量之间的关系。

气泡图:在散点图的基础上引入第三个维度(用点的大小表示,Bubble Chart),可表达更丰富的数据关系。
四、版本差异详解
如果你正在从旧版本升级,或者维护历史项目,理解版本间的API差异至关重要。
image.png

五、交互、动态更新与性能优化

5.1 动态更新数据
Chart.js支持在运行时更新数据,并自动触发平滑的动画过渡。然而,错误的数据更新方式会导致动画失效。

// ❌ 错误方式:直接替换整个data对象(会导致动画丢失)
chart.data = newData;
chart.update();

// ✅ 正确方式:通过数组方法修改数据并调用update()
function updateChart(newData) {
    chart.data.datasets[0].data = newData;   // 更新数据
    chart.data.labels = ['新标签1', '新标签2']; // 更新标签
    chart.update();   // 调用update()方法,Chart.js会智能地应用过渡动画[citation:9]
}

5.2 性能优化策略
使用update('none'):当数据未变化,只是因为窗口大小改变需要调整图表时,调用chart.update('none')可以跳过动画,避免不必要的重新渲染。

减少动画复杂度:对于静态图表,设置options.animation = false可以完全禁用动画,提升渲染速度。

使用内部数据格式:通过data.datasets[0].data直接操作数据,跳过初始数据解析步骤,可以提升性能。
5.3 导出图表为图片

// 获取图表的base64数据
const image = canvas.toDataURL('image/png');

// 下载图片
const link = document.createElement('a');
link.download = 'chart.png';
link.href = image;
link.click();

5.4 移动端优化与触摸交互
基础响应式配置:为canvas外层容器设置明确的宽高比,并配置responsive: true, maintainAspectRatio: false。

自定义触摸目标:工具提示、交互点等建议设置最小44px的触摸区域,方便手指触控。

基于屏幕尺寸的动态配置:

const isMobile = window.innerWidth < 768;
const config = {
    type: 'bar',
    options: {
        scales: {
            x: {
                ticks: {
                    maxRotation: isMobile ? 0 : 45,  // 移动端取消标签旋转
                    autoSkip: isMobile,
                    maxTicksLimit: isMobile ? 5 : 10
                }
            }
        }
    }
};

5.5 事件监听与设备适配
解决触摸滑动与页面滚动冲突:在高交互图表中,可在特定的触摸区域调用preventDefault()来阻止页面滚动,从而优先响应图表交互。

const canvas = document.getElementById('myChart');
canvas.addEventListener('touchstart', (e) => {
    e.preventDefault();   // 仅在需要高频图表交互时使用,慎防阻止页面正常滚动
}, { passive: false });

来源:
http://lemci.cn

相关文章
|
12月前
|
人工智能
真·零门槛!原来手搓AI应用这么简单
这是一篇关于如何创作小红书爆款文案的专业指南,涵盖标题技巧、正文结构、情绪表达及关键词运用。内容包括高吸引力标题公式、正文六种开篇模板、关键词库和写作规则,帮助用户高效打造高转化文案。
758 1
|
4月前
|
人工智能 JavaScript API
零成本搭建OpenClaw AI员工指南:OpenClaw阿里云/本地部署配置英伟达免费 API +集成飞书步骤及常见问题
在AI工具落地过程中,Token消耗过高始终是个人用户与小型团队的核心痛点——主流大模型API按调用量计费,长期使用成本居高不下。而2026年英伟达推出的免费API,彻底打破了这一限制:支持GLM5、GLM4.7、MiniMax M2.1、Kimi2.5等主流模型,仅限制40rpm(每分钟40次)请求速率,无其他配额约束,成为OpenClaw(原Clawdbot)的最佳算力搭档。
4335 7
|
3月前
|
Web App开发 前端开发 数据可视化
前端组件库 ——ECharts 知识点大全(一)
教程来源 https://bgnno.cn/ ECharts 是 Apache 顶级开源可视化库,由百度于2013年发起,支持50+图表类型、千万级数据渲染、Canvas/SVG双引擎及深度交互。兼容主流浏览器与移动端,广泛应用于商业、政务与科研领域。
|
6月前
|
人工智能 关系型数据库 分布式数据库
PolarDB AI助手:自然语言驱动的智能数据库运维新范式
阿里云PolarDB推出AI助手(Copilot),基于大模型与专家知识库,集成智能问答、诊断、感知三大能力,支持自然语言交互,实现慢SQL分析、参数调优、主备根因定位等场景化运维,显著降低门槛、提升稳定性与效率。(239字)
PolarDB AI助手:自然语言驱动的智能数据库运维新范式
|
4月前
|
机器学习/深度学习 人工智能 算法
美团2026春招笔试复盘:AI知识正式进入必考范围
3月中旬美团春招笔试释放明确信号:AI基础(如Transformer、Attention、Agent等)已成必考项,非仅算法岗。笔试结构稳定但选择题新增大模型考点,编程题难度梯度明显,图论压轴题重模型转化。备考需三足鼎立:构建算法题型模型、夯实AI通识、提升工程实现稳定性。
|
7月前
|
JSON 前端开发 Java
Spring MVC 常见注解详解:让 HTTP 请求精准命中你的方法
本文详解Spring MVC核心注解,从@RequestMapping到@GetMapping等快捷方式,结合@PathVariable、@RequestBody等常用配套注解,助你掌握声明式路由开发,提升效率,实现RESTful风格接口设计。
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
4954 4
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
Web App开发 前端开发 JavaScript
JavaScript动态渲染页爬取——Playwright的使用(一)
JavaScript动态渲染页爬取——Playwright的使用(一)
1874 2
|
开发工具 git 索引
$ git revert -m v1.0.21 6003eb5f5b455f0a3dfb74f48f63878e7 error: option `mainline' expect
$ git revert -m v1.0.21 6003eb5f5b455f0a3dfb74f48f63878e7 error: option `mainline' expect