Я бы хотел, чтобы вы помогли создать своего рода «калибр», основанный на «дуге» круг, который будет заполнять значение от 0 до 100 динамически (8 датчиков).d3.js инициализация и переход дуги в виде калибровочной оси
Мне удалось получить эту работу (на основе Arc Clock gist https://gist.github.com/mbostock/1098617), но теперь я пытаюсь заставить переход при каждом обновлении и в начале.
Я пытаюсь реализовать следующий поток: 1. arch loaded - переходит от 0 до 100 -> от 100 до начального значения 2. arch updated - переходит от предыдущего значения в 0 -> от 0 до нового значение
не могу найти правильный способ осуществить это ...
значения в настоящее время вставляется в случайные (10 приращений)
var w = 1500,
h = 300,
x = d3.scale.ordinal().domain(d3.range(8)).rangePoints([0, w], 2);
var fields = [
{ name: "A", value: 100, previous: 0, size: 100 },
{ name: "B", value: 100, previous: 0, size: 100 },
{ name: "C", value: 100, previous: 0, size: 100 },
{ name: "D", value: 100, previous: 0, size: 100 },
{ name: "E", value: 100, previous: 0, size: 100 },
{ name: "F", value: 100, previous: 0, size: 100 },
{ name: "G", value: 100, previous: 0, size: 100 },
{ name: "H", value: 100, previous: 0, size: 100 }
];
var arc = d3.svg.arc()
.innerRadius(40)
.outerRadius(60)
.startAngle(0)
.endAngle(function (d) { return (d.value/d.size) * 2 * Math.PI; });
var svg = d3.select("body").append("svg:svg")
.attr("width", w)
.attr("height", h)
.append("svg:g")
.attr("transform", "translate(0," + (h/2) + ")");
var path = svg.selectAll("path")
.data(fields.filter(function (d) { return d.value; }), function (d) { return d.name; })
.enter().append("svg:path")
.attr("transform", function (d, i) { return "translate(" + x(i) + ",0)"; })
.transition()
.ease("liniar")
.duration(750)
.attrTween("d", arcTween);
setTimeout(function() { services() }, 750);
setInterval(function() { services(); }, 5000);
function services() {
for (var i = 0; i < fields.length; i++) {
fields[i].previous = fields[i].value;
fields[i].value = Math.floor((Math.random() * 100) + 1);
}
path = svg.selectAll("path").data(fields.filter(function (d) { return d.value; }), function (d) { return d.name; });
path.transition()
.ease("linear")
.duration(1600)
.attrTween("d", arcTweenReversed);
}
function arcTween(b) {
var i = d3.interpolate({ value: b.previous }, b);
return function (t) {
return arc(i(t));
};
}
Вот JSFiddle, чтобы увидеть его вживую : http://jsfiddle.net/p5xWZ/2/ Спасибо заранее!
Perfect !! Спасибо друг! Мой последний вопрос: как установить разные цвета для разных значений? Я хочу, чтобы она была заполнена красным цветом, когда значение равно 99 или меньше, и будет зеленым, когда ему будет 100, при любой возможности это будет простая реализация? Я знаю его что-то вроде: .style ("fill", function (d) {if (d.value <100) {return "red";} else {return "green"}}) Но не знаю, где так что он также будет включен в переходы – natiz
Отредактировано. Это добавляет цвет заливки, так что манометр становится красным, когда значение достигает 100. Оно * не * становится красным как часть анимации (переход на 100, а затем от 0 до текущего значения). Не стесняйтесь повышать и/или принимать ответ;) – mccannf