我正在尝试创建类似于此 http://demo.joostkiens.com/het-parool-4g/的内容
绘制的圆圈有向外跳动的外线。
这是我到目前为止的演示。
我用一些虚拟数据绘制了圆圈。顶部是红色圆圈。如何根据警报数据调用动画并使其更加生动......例如。警报级别。
我不确定如何创建一个循环动画,其半径从圆周上弹回然后淡出 - 基于警报级别阈值具有这种多样性
理想情况下,需要像这样在循环中发生转换。http://jsfiddle.net/pnavarrc/udMUx/
var speedLineGroup = sampleSVG.append("g")
.attr("class", "speedlines");
speedLineGroup.selectAll("circle.dl-speed-static")
.data(dataset)
.enter().append("circle")
.style("stroke", "red")
.style("fill", "black")
.attr("r", function(d){
return d.value;
})
.attr("cx", function(d){
return d.xcoord;
})
.attr("cy", function(d){
return d.ycoord;
})
.attr("class", "dl-speed-static")
.attr("stroke-opacity", function (e) {
return 1;
//return var
})
.attr("fill-opacity", function (e) {
return 1;
//return var
})
.transition()
.ease("linear")
.duration(200)
.attr("r", function (e) {
return 1;
//return var
})
我已经合并了帖子中的想法。我已将环创建放在它自己的函数中并删除了超时。我也开始尝试挂钩每个标记的警报阈值。
http://jsfiddle.net/NYEaX/102/
但该应用程序似乎仍然延迟/错误 - 不像主要示例中那样非常清楚。这如何进一步改进。一些警报计数很低 - 但这种方法会导致铃声过早地跳动或闪烁。几乎就像我需要反转该值以获得低警报 - 创建较慢的响应。
function makeRings() {
var datapoints = circleGroup.selectAll("circle");
var radius = 1;
function myTransition(circleData){
var transition = d3.select(this).transition();
speedLineGroup.append("circle")
.attr({"class": "ring",
"fill":"red",
"stroke":"red",
"cx": circleData.xcoord,
"cy": circleData.ycoord,
"r":radius,
"opacity": 0.4,
"fill-opacity":0.1
})
.transition()
.duration(function(){
return circleData.alarmLevel*100;
})
.attr("r", radius + 100 )
.attr("opacity", 0)
.remove();
transition.each('end', myTransition);
}
datapoints.each(myTransition);
}
这是最新的代码..
makeRings()
var t = window.setInterval(makeRings, 10000);
function makeRings() {
var datapoints = mapSVG.selectAll("circle.location");
var radius = 1;
function myTransition(circleData){
console.log("circleData", circleData);
var transition = d3.select(this).transition();
speedLineGroup.append("circle")
.attr({"class": "ring",
"fill":"red",
"stroke":"red",
"cx": circleData.x * ratio,
"cy": circleData.y * ratio,
"r":radius,
"opacity": 0.4,
"fill-opacity":0.1
})
.transition()
.duration(function(){
return (circleData.redSum * 100);
})
.attr("r", radius + 30 )
.attr("opacity", 0)
.remove();
transition.each('end', myTransition);
}
datapoints.each(myTransition);
}