javascript - 如何使用表单更改 Javascript 代码中变量的值
问题描述
我刚开始(两天前)为一个学校项目学习编码,这对于我目前的技能来说可能过于雄心勃勃。我正在尝试使用给定数量的节点和链接以及给定的充电节点创建一个随机图。我使用了随机图形生成器的开源代码,但我找不到修改节点数、链接数和使用 HTML 表单收费的方法。这是不起作用的代码。如果有人可以帮助我解决这个问题,我会很高兴。(请容忍我的语法,我是初学者......)
var width = 1000,
height = 1000;
var n = 20, // number of nodes
m = 100, // number of links
charge = -10000;
function changevalue() {
var n = getElementById("numberofnodes").value;
var m = getElementById("numberoflinks").value;
var charge = getElementById("chargenumber").value;
}
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.on("mousedown", create);
create();
function create() {
svg.selectAll(".link, .node").remove();
randomGraph(n, m, charge);
}
function randomGraph(n, m, charge) { //creates a random graph on n nodes and m links
var nodes = d3.range(n).map(Object),
list = randomChoose(unorderedPairs(d3.range(n)), m),
links = list.map(function(a) {
return {
source: a[0],
target: a[1]
}
});
var force = d3.layout.force()
.size([width, height])
.nodes(nodes)
.links(links)
.charge(charge)
.on("tick", tick)
.start();
var svgLinks = svg.selectAll(".link").data(links)
.enter().append("line")
.attr("class", "link");
var svgNodes = svg.selectAll(".node").data(nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 3)
.style("fill", "white");
svgLinks.transition().duration(800)
.style("stroke-width", 3);
function tick() {
svgNodes
.attr("cx", function(d) {
return d.x
})
.attr("cy", function(d) {
return d.y
});
svgLinks
.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
});
}
}
function randomChoose(s, k) { // returns a random k element subset of s
var a = [],
i = -1,
j;
while (++i < k) {
j = Math.floor(Math.random() * s.length);
a.push(s.splice(j, 1)[0]);
};
return a;
}
function unorderedPairs(s) { // returns the list of all unordered pairs from s
var i = -1,
a = [],
j;
while (++i < s.length) {
j = i;
while (++j < s.length) a.push([s[i], s[j]])
};
return a;
}
<!DOCTYPE html>
<html>
<head>
<title>Random Graph</title>
<meta charset="utf-8">
<style>
.link {
stroke: black;
}
.node {
stroke: green;
stroke-width: 3px;
}
</style>
</head>
<body>
<h1>Voici un graphe aléatoire</h1>
<input id="numberofnodes" type="number" />
<input id="numberoflinks" type="number" />
<input id="chargenumber" type="number" />
<button type="button" onclick="changevalue()">OK</button>
<script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
</script>
</body>
</html>
解决方案
推荐阅读
- solidity - 如何正确将 SafeMath.sol 导入合约
- r - Smote - 选择 Perc_under 和 Perc_Over
- python - AttributError:“模块”没有属性
- mysql - 在 MYSQL 中如何用减法更新 GROUP BY
- asp.net-core - ClaimTypes.NameIdentifier 与 Microsoft GraphApi 用户 ID 有何关系
- google-cloud-platform - 是否可以仅在 GCP 上首次启动时运行启动脚本?
- php - 引导切换没有响应
- jdbc - Kafka Connect JDBC Sink 连接器:如何删除没有 NULL 值的记录?
- python - 无法在 Ejabberd 19.09.1 中启动外部身份验证程序
- java - 在背景上设置对象/图像的位置