当前位置: 首页 > 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.xdnf.cn/news/1054441.html

相关文章:

  • 创始人IP如何崛起:系统化打造的实践路径 | 创客匠人
  • web性能优化
  • 动态规划之斐波那契数(一)
  • 【已解决】bash: /usr/bin/perl: bad interpreter: No such file or directory
  • UI学习汇总
  • Yocto vs Buildroot:SDK(软件开发套件)创建能力全面对比
  • 快速入门多线程(一):线程生命周期详解(附流程图详解)
  • Python数字信号处理——利用块间系数相关性的DCT域鲁棒盲图像水印(PyQT5界面)
  • 【分析学】 实数
  • Spring事务传播机制深度解析
  • c++类型擦除
  • DNS递归查询步骤
  • 2. Anaconda 的安装及 Pytorch 环境安装
  • 2 Studying《Arm A715 Technical Reference Manual》
  • Java 常用类 Arrays:从零到实战的数组操作指南
  • 第五节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 角色管理模块(上)
  • 云知声“流血”上市:三年亏损超12亿元,负债高企,现金流紧张
  • 进程间通信之进程间传递文件描述符
  • 【杂谈】-剖析 LLMs 与 LRMs:人工智能推理的困境与展望
  • 深度学习---ONNX(Open Neural Network Exchange)
  • python zip() 函数的用法
  • 《一元线性回归:从基础到应用及模型处理》
  • centos7安装weblogic
  • linux多线程之线程基础
  • ATSAMV71Q21B基于Microchip Studio以及ASF4.0架构使用printf打印float类型
  • 超标量处理器设计9-执行
  • 647. 回文子串
  • AI驱动SEO关键词精准布局
  • PMP成本管理时,合同成本的计算和注意事项
  • 耗时3小时,把这两天做好的爬虫程序,用Python封装成exe文件