javascript - D3 : text transitioning in typewriter style

标签 javascript d3.js label transition interpolation

在此jsfiddle ,标签通过减小旧文本的字体从一个文本过渡到另一个文本,然后增加新文本的字体。

但是,我希望新文本以“打字机”的方式出现,例如 jsfiddle .如何编写自定义 D3 文本插值器,以这种“打字机”方式启用文本转换?

最佳答案

有趣的想法,两者都可以完成工作,但有一种特定于 d3 的方法可以做到这一点:自定义 tween function .

在这里 fiddle :http://jsfiddle.net/QbysN/3/

代码:

function transition() {
    d3.select('text').transition()
        .duration(5000)
        .ease("linear")
        .tween("text", function () {
            var newText = data[i];
            var textLength = newText.length;
            return function (t) {
                this.textContent = newText.substr(0, 
                                   Math.round( t * textLength) );
            };
        });

    i = (i + 1) % data.length;
}

传递给 .tween() 的外部函数称为 tween 工厂,因为它为每个元素创建了 tween 函数。它在转换开始时针对每个元素执行一次(并且通常使用元素的数据和索引作为参数)。它运行任何设置计算,然后返回将在过渡期间使用的补间函数。

返回的tween 函数 也称为插值器,因为它计算中间值。在这种情况下是:

function (t) {
   this.textContent = newText.substr(0, Math.round( t * textLength) );
};

此函数将在转换的每个“滴答声”时被调用,并传递一个介于 0 和 1 之间的值,表示结果应该经过多远的转换。 (0 变为 1 的速率将根据缓动参数而变化,我使用线性缓动以获得稳定的类型速率。)

当您为属性或样式指定自定义补间函数时,补间函数将返回在过渡的那个点用于该属性或样式的值。对于通用的 transition.tween(),不使用返回值,您的函数实际上必须自己进行更改——我通过直接设置 textContent 属性来实现元素。我将它设置为目标文本的子字符串,其中子字符串中的字符数由 t 参数(始终在 0 和 1 之间)和文本长度决定,因此整个文本在过渡期间被输入。

附言您也可以享受缓动功能带来的乐趣。 “弹跳”轻松让打字员看起来不确定他们正在写什么:

http://jsfiddle.net/QbysN/4/

关于javascript - D3 : text transitioning in typewriter style,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21567336/

相关文章:

r - 使用 geom_text 标记 geom_error 条

javascript - 如何使用jquery动态生成的id来获取标签的值

php - AJAX responseText 在对 .php 的 GET 请求后未定义

javascript - 为什么括号和逗号如此奇怪地放在 "function name([param[, param[, ... param]]])"中?

javascript - CasperJS 在 AngularJS 上运行不佳

javascript - D3 JS 附加到 div 奇怪的结果

javascript - ReactJS componentDidMount + 渲染

javascript - Google Sheets 脚本中的循环出错

javascript - 向客户端发送 JSON 数据? D3.js 渲染 JSON 数据

ios - iPad 应用中所有标签的模糊字体