canvas8 = {
const height = 250;
const width = 1000;
const labelY=80;
const transitionTime=1000;
const context = DOM.context2d(width, height);
var detachedContainer = document.createElement("custom");
var dataContainer = d3.select(detachedContainer);
function drawCustom(data) {
var dataBinding = dataContainer.selectAll("custom.rect")
.data(data, d => d.name);
dataBinding
.transition()
.ease(d3.easeLinear)
.duration(transitionTime)
.delay(index*transitionTime)
.attr("size", function(d, i) {
return d.value;})
.attr("x", function(d, i) {
return d.rank*200-100;});
dataBinding
.enter()
.append("custom")
.classed("rect", true)
.attr("x", function(d, i) {
return d.rank*200-100;})
.attr("y", 100)
.attr("size", function(d, i) {
if (d.value) {return 15;}
else{ return 0}
});
dataBinding.exit()
.transition()
.duration(transitionTime)
.delay(index*transitionTime)
.attr("size", 0)
.remove();
var labels = dataContainer.selectAll("custom.text")
.data(data, d => d.name);
labels
.transition()
.ease(d3.easeLinear)
.duration(transitionTime)
.delay(index*transitionTime)
.attr("size", function(d, i) {
if (d.value) {return 15;}
else{ return 0;}
})
.attr("x", function(d, i) {
return d.rank*200-100+20;});
labels
.enter()
.append("custom")
.classed("text", true)
.attr("x", function(d, i) {
return d.rank*200-100+20;})
.attr("y", labelY)
.attr("name", d=>{return d.name})
.attr("size", function(d, i) {
if (d.value) {return 15;}
else{ return 0;}
});
labels.exit()
.transition()
.duration(transitionTime)
.delay(index*transitionTime)
.attr("size", 0)
.remove();
}
function drawCanvas() {
context.fillStyle = "#eee";
context.rect(0,0,width,height);
context.fill();
var elements = dataContainer.selectAll("custom.rect");
elements.each(function(d) {
var node = d3.select(this);
context.beginPath();
context.fillStyle = "rgba(255, 170, 1,0.8)";
context.rect(node.attr("x"), node.attr("y"),40, node.attr("size"));
context.fill();
context.closePath();
})
var labelElements = dataContainer.selectAll("custom.text");
labelElements.each(function(d) {
var labelNode = d3.select(this);
context.font = labelNode.attr("size")+"px Arial";
context.textAlign = "center";
context.fillStyle = "rgba(3, 123, 144,0.9)";
context.fillText(labelNode.attr("name"), labelNode.attr("x"),labelNode.attr("y"));
context.fill();
})
}
d3.timer(drawCanvas);
var dataArray = [
[
{ "name": "Apple", "value": 12, "rank": 2 },
{ "name": "Ball", "value": 84, "rank": 1 },
{ "name": "Cat", "value": 15, "rank": 3 },
{ "name": "Dog", "value": 0, "rank": 4 },
],
[
{ "name": "Apple", "value": 17, "rank": 3 },
{ "name": "Ball", "value": 95, "rank": 1 },
{ "name": "Cat", "value": 45, "rank": 2 },
],
[
{ "name": "Ball", "value": 17, "rank": 2 },
{ "name": "Apple", "value": 83, "rank": 1 },
{ "name": "Cat", "value": 15, "rank": 3 },
],
[
{ "name": "Apple", "value": 17, "rank": 2 },
{ "name": "Ball", "value": 83, "rank": 1 },
{ "name": "Cat", "value": 15, "rank": 3 },
],
[
{ "name": "Apple", "value": 17, "rank": 3 },
{ "name": "Ball", "value": 95, "rank": 1 },
{ "name": "Cat", "value": 45, "rank": 2 },
{ "name": "Dog", "value": 0, "rank": 4 },
],
];
for (var index = 0; index < dataArray.length; index++) {
drawCustom(dataArray[index]);
}
//drawCustom([1,7,13,20,23]);
//drawCustom([1,7,12,16,20]);
return context.canvas;
}