当前位置: 首页 > news >正文

02-D3.js 控制横向柱图切换数据带动画效果

D3.js学习记录

首先通过generateRandomData()函数生成随机数,后续可通过setInterval控制固定秒数内更新图表。

   function generateRandomData() {return Array.from({ length: 24 }, () =>Math.floor(Math.random() * 1000) + 10);}

将d3生成图表的代码封装到 updateChart() 函数中,参数是传入的数据(由generateRandomData()生成),使用 .join 处理数据更新。

  function updateChart(newData) {// 数据绑定与元素更新svg.selectAll('rect').data(newData)  // 绑定新数据.join(          // 处理元素的进入、更新、退出enter => enter  // 处理新元素.append('rect').attr('width', d => d)  // 初始宽度.attr('height', 16)     // 固定高度.attr('x', 0)           // 水平起始位置.attr('y', (d, i) => i * 20),  // 垂直位置(每个间隔20px)update => update  // 处理已存在的元素.attr('width', d => d)  // 更新宽度为新数据值.attr('y', (d, i) => i * 20),  // 同步更新垂直位置(可选)exit => exit.remove()  // 移除多余元素(当数据减少时));}

由于此处d3.js使用的版本是v5,所以动画的关键是配合使用CSS,如 rect { transition: all 0.6s; }

rect {transition: all 0.6s;/* 全局过渡(可选,D3的transition更优先) */
}

【效果图】

【完整代码】

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="./style.css">
</head><body><main><h1>Today</h1><svg width="900" height="400"></svg></main><script text="script" src="./d3.min.js"></script></body>
<script>// 生成随机数据的函数(可单独提取方便复用)function generateRandomData() {return Array.from({ length: 24 }, () =>Math.floor(Math.random() * 1000) + 10);}// 选择SVG容器const svg = d3.select('svg');// 定义更新图表的函数function updateChart(newData) {// 数据绑定与元素更新svg.selectAll('rect').data(newData)  // 绑定新数据.join(          // 处理元素的进入、更新、退出enter => enter  // 处理新元素.append('rect').attr('width', d => d)  // 初始宽度.attr('height', 16)     // 固定高度.attr('x', 0)           // 水平起始位置.attr('y', (d, i) => i * 20),  // 垂直位置(每个间隔20px)update => update  // 处理已存在的元素.attr('width', d => d)  // 更新宽度为新数据值.attr('y', (d, i) => i * 20),  // 同步更新垂直位置(可选)exit => exit.remove()  // 移除多余元素(当数据减少时));}// 初始加载时绘制第一组数据updateChart(generateRandomData());// 设置定时器,每3秒更新一次数据setInterval(() => {updateChart(generateRandomData());}, 3000);
</script></html>

http://www.dtcms.com/a/251139.html

相关文章:

  • 微信小程序使用computed
  • Python文件与目录操作管理详解
  • 【系统分析师】2011年真题:综合知识-答案及详解
  • 条件收敛的级数中项必须趋于 0,正负项抵消,但趋于 0 的速度不需要“足够快”
  • 《仿盒马》app开发技术分享-- 回收金提现安全锁校验(端云一体)
  • Java基础复习之继承
  • 【鸿蒙初级】
  • EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
  • Flutter包管理与插件开发完全指南
  • flutter 项目配置Gradle下载代理
  • 算法题(力扣每日一题)—改变一个整数能得到的最大差值
  • 性能优化 - 高级进阶: Spring Boot服务性能优化
  • 强化学习-UCB示例
  • leetcode0187. 重复的DNA序列-medium
  • 【Linux】基于策略模式的简单日志设计
  • Rokid AR交互开发工具对比
  • 怎么优化MySQL中的索引
  • MIT线性代数第三讲笔记
  • [笔记] 基于esp32s3用GUI-Guider-1.9.1-GA开发LVGL界面
  • UI学习汇总
  • LiteRT-LM边缘平台上高效运行语言模型
  • 第10章:Neo4j与其他技术集成
  • 第8章:Neo4j性能优化
  • 在虚拟机 银河麒麟|ubuntu 中安装和配置NVIDIA显卡驱动
  • 【运维系列】【ubuntu22.04】Docker安装mysql 8.0.36 教程
  • 基于大模型预测缺铁性贫血的综合技术方案大纲
  • 【系统分析师】2011年真题:案例分析-答案及详解
  • UE5错误 Linux离线状态下错误 circular dependency detected;includes/requires
  • 基于MediaPipe的手指目标跟踪与手势识别+人体姿态识别估计:MediaPipe与OpenPose算法对比
  • 第11章:Neo4j实际应用案例