[D3] Animate with the General Update Pattern in D3 v4
In D3, the General Update Pattern is the name given to what happens when a data join is followed by operations on the enter, update, and exit selections. When a chart's data changes over time and each update can both create new elements and destroy existing ones, the General Update pattern can help convey meaning to users. This lesson demonstrates the pattern using animated transitions on a column chart.
function render(subject = 'math') { // Define a resuable transation variable var t = d3.transition().duration(1000); var update = svg.selectAll('rect') .data(data.filter(d => d[subject]), d => d.name); //d => d.name is a uniq idientifier // First: we want to remove the existing object which doesn't have any value // Get rid of null value object // Also animation y and height attr to produce // fade out effect update .exit() .transition(t) .attr('y', height) .attr('height', 0) .remove(); // Second, we want to animate the existing elements height update .transition(t) .delay(1000) .attr('y', d => yScale(d[subject])) .attr('height', d => height - yScale(d[subject])); // Last, for the new data which is not in the page before // We want to animate update .enter() .append('rect') .attr('y', height) .attr('height', 0) .attr('x', d => xScale(d.name)) .attr('width', d => xScale.bandwidth()) .transition(t) .delay(update.exit().size() ? 2000: 0) // If page refresh, we don't want to wait 2000ms .attr('y', d => yScale(d[subject])) .attr('height', d => height - yScale(d[subject])); } render();
分类:
D3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-08-24 [Ramada] Build a Functional Pipeline with Ramda.js
2015-08-24 [rxjs] Throttled Buffering in RxJS (debounce)
2015-08-24 [rxjs] Demystifying Cold and Hot Observables in RxJS
2015-08-24 [rxjs] Shares a single subscription -- publish()