- D3.js 教程
- D3.js - 主页
- D3.js - 简介
- D3.js - 安装
- D3.js - 概念
- D3.js - 选择
- D3.js - 数据连接
- D3.js - SVG 简介
- D3.js - SVG 转换
- D3.js - 过渡
- D3.js - 动画
- D3.js - 绘制图表
- D3.js - 图表
- D3.js - 地理
- D3.js - 数组 API
- D3.js - 集合 API
- D3.js - 选择 API
- D3.js - 路径 API
- D3.js - 秤 API
- D3.js - 轴 API
- D3.js - 形状 API
- D3.js - 颜色 API
- D3.js - 转换 API
- D3.js - 拖动 API
- D3.js - 缩放 API
- D3.js - 请求 API
- 分隔符分隔值 API
- D3.js - 计时器 API
- D3.js - 工作示例
- D3.js 有用资源
- D3.js - 快速指南
- D3.js - 有用的资源
- D3.js - 讨论
D3.js - 动画
D3.js 通过过渡支持动画。我们可以通过正确使用过渡来制作动画。过渡是关键帧动画的有限形式,只有两个关键帧 - 开始和结束。起始关键帧通常是 DOM 的当前状态,结束关键帧是一组属性、样式和您指定的其他属性。转换非常适合转换到新视图,而无需依赖于起始视图的复杂代码。
示例- 让我们考虑“transition_color.html”页面中的以下代码。
<!DOCTYPE html> <html> <head> <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script> </head> <body> <h3>Simple transitions</h3> <script> d3.select("body").style("background-color", "lightblue") // make the background-color lightblue.transition() .style("background-color", "gray"); // make the background-color gray </script> </body> </html>
在这里,文档的背景颜色从白色变为浅灰色,然后变为灰色。
持续时间()方法
uration() 方法允许属性更改在指定的持续时间内顺利发生,而不是立即发生。让我们使用以下代码进行需要 5 秒的转换。
<!DOCTYPE html> <html> <head> <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script> </head> <body> <h3>Simple transitions</h3> <script> d3.selectAll("h3").transition().style("color","green").duration(5000); </script> </body> </html>
在这里,过渡顺利而均匀地进行。我们也可以使用以下方法直接分配RGB颜色代码值。
d3.selectAll("h3").transition().style("color","rgb(0,150,120)").duration(5000);
现在,每个颜色数缓慢、平稳、均匀地从 0 变化到 150。为了获得从起始帧值到结束帧值的中间帧的准确混合,D3.js 使用内部插值方法。语法如下 -
d3.interpolate(a, b)
D3 还支持以下插值类型 -
interpolateNumber - 支持数值。
interpolateRgb - 支持颜色。
interpolateString - 支持字符串。
D3.js 负责使用正确的插值方法,在高级情况下,我们可以直接使用插值方法来获得我们想要的结果。如果需要,我们甚至可以创建一个新的插值方法。
延迟()方法
Delay() 方法允许在一段时间后发生转换。考虑“transition_delay.html”中的以下代码。
<!DOCTYPE html> <html> <head> <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script> </head> <body> <h3> Simple transitions </h3> <script> d3.selectAll("h3").transition() .style("font-size","28px").delay(2000).duration(2000); </script> </body> </html>
过渡的生命周期
过渡有四个阶段的生命周期 -
- 过渡已安排好。
- 过渡开始。
- 过渡运行。
- 过渡结束。
让我们一一详细讨论这些内容。
过渡已安排
转换是在创建时安排的。当我们调用Selection.transition时,我们正在安排一个转换。这也是我们调用attr()、style()等过渡方法来定义结束关键帧的时候。
过渡开始
转换根据其延迟开始,该延迟是在计划转换时指定的。如果未指定延迟,则转换会尽快开始,通常是几毫秒后。
如果转换有延迟,则应仅在转换开始时设置起始值。我们可以通过监听开始事件来做到这一点 -
d3.select("body") .transition() .delay(200) .each("start", function() { d3.select(this).style("color", "green"); }) .style("color", "red");
过渡运行
当转换运行时,它会重复调用转换值,范围从 0 到 1。除了延迟和持续时间之外,转换还可以轻松控制时序。缓动会扭曲时间,例如慢入和慢出。某些缓动函数可能会暂时给出大于 1 或小于 0 的 t 值。
过渡结束
过渡结束时间始终恰好为 1,因此在过渡结束时准确设置结束值。转换根据其延迟和持续时间的总和结束。当转换结束时,将调度结束事件。