Built with blockbuilder.org
forked from jalapic's block: network fade
forked from jalapic's block: network fade 2
Built with blockbuilder.org
forked from jalapic's block: network fade
forked from jalapic's block: network fade 2
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
<style> | |
.node circle { | |
stroke-width: 2px; | |
} | |
.node text { | |
font-family: sans-serif; | |
text-anchor: middle; | |
pointer-events: none; | |
user-select: none; | |
-webkit-user-select: none; | |
} | |
.link { | |
stroke-width: 4px; | |
} | |
text { | |
font: 18px sans-serif; | |
pointer-events: none; | |
} | |
#end-arrow { | |
fill: #88A; | |
} | |
</style> | |
<body> | |
<h1> This is work in progress and is not working yet !!! </h1> | |
<p> | |
<label for="nHeightx" | |
style="display: inline-block; width: 240px; text-align: right"> | |
heightx = <span id="nHeightx-value">…</span> | |
</label> | |
<input type="range" min="1" max="280" id="nHeightx"> | |
</p> | |
<p>Use the slider to filter by edge weight:</p> | |
<script> | |
function bar() { | |
console.log("click"); | |
force.stop(); | |
force.start(); | |
} | |
var links2 = [ | |
{source: "A", target: "D", weight: "1"}, | |
{source: "A", target: "K", weight: "2"}, | |
{source: "B", target: "G", weight: "3"}, | |
{source: "H", target: "B", weight: "4"}, | |
{source: "C", target: "A", weight: "5"}, | |
{source: "C", target: "L", weight: "7"}, | |
{source: "E", target: "A", weight: "9"}, | |
{source: "F", target: "B", weight: "11"}, | |
{source: "F", target: "G", weight: "15"}, | |
{source: "K", target: "J", weight: "20"}, | |
{source: "F", target: "I", weight: "25"}, | |
{source: "G", target: "H", weight: "30"}, | |
{source: "E", target: "K", weight: "31"}, | |
{source: "E", target: "G", weight: "32"}, | |
{source: "E", target: "F", weight: "33"}, | |
{source: "E", target: "M", weight: "34"}, | |
]; | |
var links = []; | |
// Slider......................................... | |
// Add the initial text values | |
updateHeightx(150); | |
// this changes the text value on the slider | |
d3.select("#nHeightx").on("input", function() { | |
updateHeightx(+this.value); | |
}); | |
// Update the height attributes | |
function updateHeightx(nHeightx) { | |
// adjust the text on the range slider | |
d3.select("#nHeightx-value").text(nHeightx); | |
d3.select("#nHeightx").property("value", nHeightx); | |
for(var i=0; i<links2.length;i++) { | |
if (links2[i].weight >= nHeightx/15) links.push(links2[i]); | |
} | |
} | |
//for(var i=0; i<links2.length;i++) { | |
// if (links2[i].weight >= 5) links.push(links2[i]); | |
// } | |
//////////////////////////////// | |
var nodes = {}; | |
// Compute the distinct nodes from the links. | |
links.forEach(function(link) { | |
link.source = nodes[link.source] || (nodes[link.source] = {name: link.source}); | |
link.target = nodes[link.target] || (nodes[link.target] = {name: link.target}); | |
}); | |
var width = 960, | |
height = 700; | |
var force = d3.layout.force() | |
.nodes(d3.values(nodes)) | |
.links(links) | |
.size([width, height]) | |
.linkDistance(105) | |
.charge(-775) | |
.on("tick", tick) | |
.start(); | |
force.on("start", function () { | |
console.log("start"); | |
}); | |
force.on("end", function () { | |
console.log("end"); | |
}); | |
R=18 | |
var svg = d3.select("body").append("svg") | |
.attr("width", width) | |
.attr("height", height); | |
// add defs-marker | |
// add defs-markers | |
svg.append('svg:defs').selectAll("marker") | |
.data([{id:"end-arrow", opacity:1}, {id:"end-arrow-fade", opacity:0.075}]) | |
.enter().append('marker') | |
.attr('id', function(d) { return d.id; }) | |
.attr('viewBox', '0 0 10 10') | |
.attr('refX', 2+R) | |
.attr('refY', 5) | |
.attr('markerWidth', 4) | |
.attr('markerHeight', 4) | |
.attr('orient', 'auto') | |
.append('svg:path') | |
.attr('d', 'M0,0 L0,10 L10,5 z') | |
.style("opacity", function(d) { return d.opacity; }); | |
//phantom marker | |
svg.append('svg:defs') | |
.append('svg:marker') | |
.attr('id', 'end-arrow-phantom') | |
.attr('viewBox', '0 0 10 10') | |
.attr('refX', 2+R) | |
.attr('refY', 5) | |
.attr('markerWidth', 4) | |
.attr('markerHeight', 4) | |
.attr('orient', 'auto') | |
.attr('fill', '#EEE') | |
.append('svg:path') | |
.attr('d', 'M0,0 L0,10 L10,5 z'); | |
var link = svg.selectAll(".link") | |
.data(force.links()) | |
.enter() | |
.append("line") | |
.attr("class", "link") | |
.attr("stroke", "#88A") | |
.attr('marker-end', 'url(#end-arrow)') | |
.on("mouseout", fade(1)) | |
; | |
var node = svg.selectAll(".node") | |
.data(force.nodes()) | |
.enter().append("g") | |
.attr("class", "node") | |
.call(force.drag); | |
node.append("circle") | |
.attr("r", R) | |
.attr("stroke", '#777') | |
.attr("fill", '#DDD') | |
.on("mouseover", fade(.1)) | |
.on("mouseout", fade(1)) | |
; | |
node.append("text") | |
.attr("x", 0) | |
.attr("dy", ".35em") | |
.text(function(d) { return d.name; }); | |
function tick() { | |
link | |
.attr("x1", function(d) { return d.source.x; }) | |
.attr("y1", function(d) { return d.source.y; }) | |
.attr("x2", function(d) { return d.target.x; }) | |
.attr("y2", function(d) { return d.target.y; }) | |
; | |
node | |
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; }); | |
} | |
var linkedByIndex = {}; | |
links.forEach(function(d) { | |
linkedByIndex[d.source.index + "," + d.target.index] = 1; | |
}); | |
function isConnected(a, b) { | |
return linkedByIndex[a.index + "," + b.index] || linkedByIndex[b.index + "," + a.index] || a.index == b.index; | |
} | |
function fade(opacity) { | |
return function(d) { | |
node.style("stroke-opacity", function(o) { | |
thisOpacity = isConnected(d, o) ? 1 : opacity; | |
this.setAttribute('fill-opacity', thisOpacity); | |
return thisOpacity; | |
}); | |
link.style("stroke-opacity", function(o) { | |
return opacity === 1 || o.source === d || o.target === d ? 1 : opacity/2; | |
}); | |
link.attr("marker-end", function(o) { | |
return opacity === 1 || o.source === d || o.target === d ? 'url(#end-arrow)' : 'url(#end-arrow-phantom)'; | |
}); | |
}; | |
} | |
</script> | |