当前位置:首页 > JavaScript

js实现图例

2026-01-30 21:13:53JavaScript

使用Canvas绘制图例

Canvas是HTML5提供的绘图API,适合动态生成图例。通过创建<canvas>元素并调用绘图方法实现。

const canvas = document.createElement('canvas');
canvas.width = 200;
canvas.height = 100;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
ctx.fillStyle = 'red';
ctx.fillRect(10, 10, 20, 20);
ctx.font = '12px Arial';
ctx.fillText('数据系列1', 40, 25);

使用SVG创建图例

SVG是矢量图形标准,适合创建可缩放的图例。通过DOM操作创建SVG元素。

js实现图例

const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '200');
svg.setAttribute('height', '100');
document.body.appendChild(svg);

const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
rect.setAttribute('x', '10');
rect.setAttribute('y', '10');
rect.setAttribute('width', '20');
rect.setAttribute('height', '20');
rect.setAttribute('fill', 'blue');
svg.appendChild(rect);

const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
text.setAttribute('x', '40');
text.setAttribute('y', '25');
text.setAttribute('font-size', '12');
text.textContent = '数据系列2';
svg.appendChild(text);

基于CSS的图例实现

纯CSS方案适合简单静态图例,利用伪元素和Flex布局。

<div class="legend">
  <div class="legend-item">
    <span class="legend-color" style="background: green"></span>
    <span class="legend-label">数据系列3</span>
  </div>
</div>

<style>
.legend {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.legend-item {
  display: flex;
  align-items: center;
}
.legend-color {
  width: 20px;
  height: 20px;
  margin-right: 10px;
}
</style>

使用第三方库生成图例

常见图表库如Chart.js、ECharts等内置图例功能。以Chart.js为例:

js实现图例

import { Chart } from 'chart.js';

new Chart(document.getElementById('chart'), {
  type: 'bar',
  data: {
    labels: ['A', 'B', 'C'],
    datasets: [{
      label: '数据集',
      data: [10, 20, 30],
      backgroundColor: 'orange'
    }]
  },
  options: {
    plugins: {
      legend: {
        position: 'right',
        labels: {
          font: { size: 14 }
        }
      }
    }
  }
});

响应式图例实现

通过监听窗口大小变化动态调整图例布局。

function updateLegendLayout() {
  const width = window.innerWidth;
  if (width < 768) {
    legendElement.style.flexDirection = 'column';
  } else {
    legendElement.style.flexDirection = 'row';
  }
}

window.addEventListener('resize', updateLegendLayout);
updateLegendLayout();

可交互图例实现

为图例添加点击事件实现系列显示/隐藏功能。

document.querySelectorAll('.legend-item').forEach(item => {
  item.addEventListener('click', () => {
    const datasetIndex = item.dataset.index;
    chart.getDatasetMeta(datasetIndex).hidden = 
      !chart.getDatasetMeta(datasetIndex).hidden;
    chart.update();
    item.classList.toggle('disabled');
  });
});

标签: 图例js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…