Skip to content

Commit

Permalink
Allow submillisecond transition timing.
Browse files Browse the repository at this point in the history
Although submillisecond timing probably isn’t important for a single transition,
error can accumulate over time with chained transitions, so it’s important to
allow submillisecond timing for long-running looped transitions.
  • Loading branch information
mbostock committed Aug 15, 2013
1 parent 1816561 commit 1c88fc2
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 28 deletions.
8 changes: 4 additions & 4 deletions d3.js
Original file line number Diff line number Diff line change
Expand Up @@ -7777,16 +7777,16 @@ d3 = function() {
d3_transitionPrototype.delay = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
node.__transition__[id].delay = value.call(node, node.__data__, i, j) | 0;
} : (value |= 0, function(node) {
node.__transition__[id].delay = +value.call(node, node.__data__, i, j);
} : (value = +value, function(node) {
node.__transition__[id].delay = value;
}));
};
d3_transitionPrototype.duration = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j) | 0);
} : (value = Math.max(1, value | 0), function(node) {
node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));
} : (value = Math.max(1, value), function(node) {
node.__transition__[id].duration = value;
}));
};
Expand Down
2 changes: 1 addition & 1 deletion d3.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/transition/delay.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import "transition";
d3_transitionPrototype.delay = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function"
? function(node, i, j) { node.__transition__[id].delay = value.call(node, node.__data__, i, j) | 0; }
: (value |= 0, function(node) { node.__transition__[id].delay = value; }));
? function(node, i, j) { node.__transition__[id].delay = +value.call(node, node.__data__, i, j); }
: (value = +value, function(node) { node.__transition__[id].delay = value; }));
};
4 changes: 2 additions & 2 deletions src/transition/duration.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ import "transition";
d3_transitionPrototype.duration = function(value) {
var id = this.id;
return d3_selection_each(this, typeof value === "function"
? function(node, i, j) { node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j) | 0); }
: (value = Math.max(1, value | 0), function(node) { node.__transition__[id].duration = value; }));
? function(node, i, j) { node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j)); }
: (value = Math.max(1, value), function(node) { node.__transition__[id].duration = value; }));
};
18 changes: 9 additions & 9 deletions test/transition/transition-test-delay.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,18 @@ module.exports = {
assert.strictEqual(t[0][0].__transition__[t.id].delay, -250);
assert.strictEqual(t[0][1].__transition__[t.id].delay, -250);
},
"NaN delays are treated as 0ms": function(selection) {
var t = selection.transition().delay(NaN);
assert.strictEqual(t[0][0].__transition__[t.id].delay, 0);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 0);
"delay is coerced to a number": function(selection) {
var t = selection.transition().delay("520");
assert.strictEqual(t[0][0].__transition__[t.id].delay, 520);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 520);
},
"floating-point durations are floored to integers": function(selection) {
"floating-point durations are not floored to integers": function(selection) {
var t = selection.transition().delay(14.6);
assert.strictEqual(t[0][0].__transition__[t.id].delay, 14);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 14);
assert.strictEqual(t[0][0].__transition__[t.id].delay, 14.6);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 14.6);
var t = selection.transition().delay("16.99");
assert.strictEqual(t[0][0].__transition__[t.id].delay, 16);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 16);
assert.strictEqual(t[0][0].__transition__[t.id].delay, 16.99);
assert.strictEqual(t[0][1].__transition__[t.id].delay, 16.99);
},
"can specify delay as a function": function(selection) {
var dd = [], ii = [], tt = [], t = selection.transition().delay(f);
Expand Down
22 changes: 12 additions & 10 deletions test/transition/transition-test-duration.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,8 @@ module.exports = {
assert.strictEqual(t[0][0].__transition__[t.id].duration, 50);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 50);
},
"NaN, zero, or negative durations are treated as 1ms": function(selection) {
var t = selection.transition().duration(NaN);
assert.strictEqual(t[0][0].__transition__[t.id].duration, 1);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 1);
t.duration(0);
"zero or negative durations are treated as 1ms": function(selection) {
var t = selection.transition().duration(0);
assert.strictEqual(t[0][0].__transition__[t.id].duration, 1);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 1);
t.duration(-10);
Expand All @@ -34,13 +31,18 @@ module.exports = {
assert.strictEqual(t[0][0].__transition__[t.id].duration, 1);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 1);
},
"floating-point durations are floored to integers": function(selection) {
"duration is coerced to a number": function(selection) {
var t = selection.transition().duration("520");
assert.strictEqual(t[0][0].__transition__[t.id].duration, 520);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 520);
},
"floating-point durations are not floored to integers": function(selection) {
var t = selection.transition().duration(14.6);
assert.strictEqual(t[0][0].__transition__[t.id].duration, 14);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 14);
assert.strictEqual(t[0][0].__transition__[t.id].duration, 14.6);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 14.6);
var t = selection.transition().duration("16.99");
assert.strictEqual(t[0][0].__transition__[t.id].duration, 16);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 16);
assert.strictEqual(t[0][0].__transition__[t.id].duration, 16.99);
assert.strictEqual(t[0][1].__transition__[t.id].duration, 16.99);
},
"can specify duration as a function": function(selection) {
var dd = [], ii = [], tt = [], t = selection.transition().duration(f);
Expand Down

0 comments on commit 1c88fc2

Please sign in to comment.