我正在尝试重置或清除D3.js立体图,以使其重新开始。这是代码:
$(function(){
// create new cubism.js context to render
var graphContext = cubism.context()
.serverDelay(1000) // allow 1second delay
.step(1000) // 1 second steps
.size(650); // 50px wide
// create a new metric
// this allows you to retrieve values from some source
// this is data-source agnostic, so this does not matter.
var graphMetric = graphContext.metric(function(start, stop, step, callback) {
var values = [];
start = +start;
stop = +stop;
while (start < stop) {
start += step;
values.push(Math.random());
}
callback(null, values);
});
// here we create a new element and then append it to our
// parent container. Then we call d3 to select the newly created
// div and then we can create a chart
var graphElement = document.createElement("div");
$("#insertElement").append(graphElement);
d3.select(graphElement).call(function(div) {
div.append("div")
.attr("class", "axis top")
.call(graphContext.axis().orient("top"));
div.append("div")
.attr("class", "rule")
.call(graphContext.rule());
div.selectAll(".horizon")
.data([graphMetric])
.enter().append("div")
.attr("class", "horizon")
.call(graphContext.horizon()
.height(150)
);
});
});
这是关于jsfiddle的演示
最佳答案
我只能建议自己清理画布。像这样
$(graphElement).find('canvas')[0].getContext('2d').clearRect(0, 0, canvasWidth, canvasHeight);
完整代码(jsfiddle)
console.clear();
$(function(){
var canvasWidth = 650, canvasHeight = 150;
// create new cubism.js context to render
var graphContext = cubism.context()
.serverDelay(1000) // allow 1second delay
.step(1000) // 1 second steps
.size(canvasWidth); // 50px wide
// create a new metric
// this allows you to retrieve values from some source
// this is data-source agnostic, so this does not matter.
var graphMetric = graphContext.metric(function(start, stop, step, callback) {
var values = [];
start = +start;
stop = +stop;
while (start < stop) {
start += step;
values.push(Math.random());
}
callback(null, values);
});
// here we create a new element and then append it to our
// parent container. Then we call d3 to select the newly created
// div and then we can create a chart
var graphElement = document.createElement("div");
$("#insertElement").append(graphElement);
d3.select(graphElement).call(function(div) {
div.append("div")
.attr("class", "axis top")
.call(graphContext.axis().orient("top"));
div.append("div")
.attr("class", "rule")
.call(graphContext.rule());
div.selectAll(".horizon")
.data([graphMetric])
.enter().append("div")
.attr("class", "horizon")
.call(graphContext.horizon()
.height(canvasHeight)
);
});
$('#reset').on('click', function () {
$(graphElement).find('canvas')[0].getContext('2d').clearRect(0, 0, canvasWidth, canvasHeight);
});
});