我是D3.js的新手。 Chrome没有运行我的D3.js,但它在safari中工作正常。 这里的代码出了什么问题?请协助
这是由于某些权限问题导致Chrome在从服务器运行文件时不允许使用XMLHttpRequest(d3.json等)。
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.node {
stroke: #fff;
stroke-width: 1.5px;
}
.link {
stroke: #999;
stroke-opacity: .6;
}
</style>
<body>
Show: <select id="graph">
<option value="init">Before topic identification</option>
<option value="final">After topic identification</option>
</select>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var width = 960,
height = 1000;
var color = d3.scale.category20();
var force = d3.layout.force()
.friction(0.99)
.charge(-120)
.linkDistance(100)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("cluster.json", function(error, graph) {
force
.nodes(graph.nodes)
.links(graph.links)
.start();
var link = svg.selectAll(".link")
.data(graph.links)
.enter().append("line")
.attr("class", "link")
.style("stroke-width", 0);
var gnodes = svg.selectAll("g.gnode")
.data(graph.nodes)
.enter()
.append('g')
.classed('gnode', true);
// Add one circle in each group
var node = gnodes.append("circle")
.attr("class", "node")
.attr("r", function(d) { return d.initValue*2; })
.style("fill", color(0))
.style("fill-opacity", function(d) { return (d.type=="term") ? 0 : 0.75; })
.call(force.drag);
// Append the labels to each group
var labels = gnodes.append("text")
.style("opacity", function(d) {return d.initValue*2; })
.attr("dy", ".3em")
.style("text-anchor", "middle")
.style("font-size", function(d) {return 24+"px"; })
.text(function(d) { return d.name; })
.on("mouseover", function(d, i) {
d3.select(this)
.transition()
.duration(200)
.style('font-size', function(d) { return 45 })
.style("opacity", 1)
.style('fill', "red");
d3.select(this).moveToFront();
})
.on("mouseout", function(d, i) {
d3.select(this)
.transition()
.duration(200)
.style('font-size', function(d) { return 24 })
.style("opacity", function(d) {return d.initValue*2; })
.style('fill', "black");
});
force.on("tick", function() {
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; });
// Translate the groups
gnodes.attr("transform", function(d) {
return 'translate(' + [d.x, d.y] + ')';
});
});
d3.select("#graph").on("change", function() {
// Compute index per node.
var thisValue = this.value;
node.attr("r", function(d) { return (thisValue=="init") ? d.initValue*2 : ((d.type=="term") ? 50 : d.finalValue*2); });
node.style("fill", function(d) { return (thisValue=="init") ? color(0) : color(d.group); });
link.style("stroke-width", function(d) { return (thisValue=="init") ? 0 : 1; });
force.linkDistance( function(d) { return ((thisValue=="init") ? d.initValue : d.finalValue*20); });
force.start();
});
});
</script>
答案 0 :(得分:0)
有时您无法使用d3.json在Chrome中加载本地文件。但你可以使用jquery.get,如下所示:
$.get( "cluster.json", function( data ) {
//你的代码在这里 });
PS:最好使用$ .Deferred,在你的代码中解析。
但我想,你使用了错误的cluster.json。你能提供吗?
答案 1 :(得分:0)
您需要在某个本地服务器上运行代码..比如
localhost:8080
如果安装了Wamp或任何php服务器,只需复制通过www根文件夹中的代码并从phpMyAdmin运行
如果你安装了python open命令提示符,请转到该目录并输入
命令 python -m SimpleHTTPServer 8000
您将能够在该目录上运行本地服务器