我想創建類似這種 http://demo.joostkiens.com/het-parool-4g/d3.js畫圓與悸動外線
凡繪製圓有外線向外悸動。
這是我的演示到目前爲止。
我曾與一些虛擬數據繪製的圓圈。頂部是紅色圓圈。我如何調用動畫並使其更加生動,例如。警報等級。
我不確定如何創建具有半徑蹦過去的周長,然後淡出循環動畫 - 基於警報等級門檻有這個品種
在理想情況下需要在發生這樣的轉變一個循環,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);
}
好點 - 不是以固定的時間間隔創建戒指,而是在過渡完成後將其刪除,您可以重置同一戒指上的半徑和不透明度,然後再次開始轉換。您需要計算每個數據點使用多少個環,使用嵌套選擇來創建它們,然後在第一輪轉換中使用基於索引的延遲,以適當的時間間隔啓動它們。 – AmeliaBR
你好阿米莉亞,我修改了這裏的代碼http://jsfiddle.net/NYEaX/98/我已經能夠得到只有一個紅色的悸動。不知道我得到了「intensityTimeScale(circleData.intensity)」或「intensityRadiusScale(circleData.intensity)」是否正確。怎麼樣ckerch的答案?我如何使它更像上面的圖像樣本 - 由於警報級別而發生多於一個環? –