Skip to content

Instantly share code, notes, and snippets.

@d3noob
Last active December 3, 2016 03:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save d3noob/aee9277a3664850501f3d1d0fc731c86 to your computer and use it in GitHub Desktop.
Save d3noob/aee9277a3664850501f3d1d0fc731c86 to your computer and use it in GitHub Desktop.
Dual html inputs in v4

This is a demonstration of the use of two html 'range' inputs using d3.js v4.

This graph is part of the code samples for the update to the book D3 Tips and Tricks to version 4 of d3.js.

<!DOCTYPE html>
<meta charset="utf-8">
<title>Double Input Test</title>
<p>
<label for="nHeight"
style="display: inline-block; width: 240px; text-align: right">
height = <span id="nHeight-value"></span>
</label>
<input type="range" min="1" max="280" id="nHeight">
</p>
<p>
<label for="nWidth"
style="display: inline-block; width: 240px; text-align: right">
width = <span id="nWidth-value"></span>
</label>
<input type="range" min="1" max="400" id="nWidth">
</p>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>
var width = 600;
var height = 300;
var holder = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
// draw a rectangle
holder.append("rect")
.attr("x", 300)
.attr("y", 150)
.style("fill", "none")
.style("stroke", "blue")
.attr("height", 150)
.attr("width", 200);
// read a change in the height input
d3.select("#nHeight").on("input", function() {
updateHeight(+this.value);
});
// read a change in the width input
d3.select("#nWidth").on("input", function() {
updateWidth(+this.value);
});
// update the values
updateHeight(150);
updateWidth(100);
// Update the height attributes
function updateHeight(nHeight) {
// adjust the text on the range slider
d3.select("#nHeight-value").text(nHeight);
d3.select("#nHeight").property("value", nHeight);
// update the rectangle height
holder.selectAll("rect")
.attr("y", 150-(nHeight/2))
.attr("height", nHeight);
}
// Update the width attributes
function updateWidth(nWidth) {
// adjust the text on the range slider
d3.select("#nWidth-value").text(nWidth);
d3.select("#nWidth").property("value", nWidth);
// update the rectangle width
holder.selectAll("rect")
.attr("x", 300-(nWidth/2))
.attr("width", nWidth);
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment