当前位置:首页 > 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元素。

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为例:

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();

可交互图例实现

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

js实现图例

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
分享给朋友:

相关文章

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…