2

これは、d3 の例で一般的なタイミング関数です。

d3.timer(function() {
    var angle = (Date.now() - start) * speed,
    transform = function(d) {
        return "rotate(" + angle / d.radius + ")";};
    lightsweep.select(".lightsweep").attr("transform", transform);
});

「ライトスイープ」は私に固有のものです。d.radius は、「lightsweep」オブジェクトにバインドされたデータ オブジェクトから取得され、svg グループの回転に使用されます。このコードは機能しますが、断続的に実行したいと思います。たとえば、1 秒間実行してから、10 秒間待ってから再度実行します。どうやってやるの?

注: setInterval または setTimeout は使用したくありません。d3 タイマーにはいくつかの驚くべき属性があり、それらの機能よりも優れています。ただし、d3.timerreturn trueをキャンセルするには a が必要です。コールバック関数かもしれないと思いますが、思いつきません。

助けてくれてありがとう。

4

1 に答える 1

2

はい、d3.timer (requestAnimationFrame をサポートするブラウザーで内部的に使用します) には、ウィンドウ/タブがフォアグラウンドにないときに一時停止するなどの優れたプロパティがあります。しかし、彼のチュートリアル コードでは、Mike Bostock (d3 の作成者) が setInterval を使用してこのユース ケースをカバーしているため、残念ながらそれが最善の選択肢である可能性があります。

于 2013-02-25T03:28:44.470 に答える