<!DOCTYPE html> <meta charset="utf-8"> <title>Input test</title> <p> <label for="nAngle" style="display: inline-block; width: 240px; text-align: right"> angle = <span id="nAngle-value">…</span> </label> <input type="range" min="0" max="360" id="nAngle"> </p> <script src="https://d3js.org/d3.v5.min.js"></script> <script> var width = 600; var height = 300; var holder = d3.select("body") .append("svg") .attr("width", width) .attr("height", height); // draw d3.js text holder.append("text") .attr("class", "d3js") .style("fill", "black") .style("font-size", "56px") .attr("dy", ".35em") .attr("text-anchor", "middle") .attr("transform", "translate(300,55) rotate(0)") .text("d3.js"); // draw d3noob.org text holder.append("text") .attr("class", "d3noob") .style("fill", "black") .style("font-size", "56px") .attr("dy", ".35em") .attr("text-anchor", "middle") .attr("transform", "translate(300,130) rotate(0)") .text("d3noob.org"); // when the input range changes update the rectangle d3.select("#nAngle").on("input", function() { update(+this.value); }); // Initial starting height of the rectangle update(0); // update the elements function update(nAngle) { // adjust the range text d3.select("#nAngle-value").text(nAngle); d3.select("#nAngle").property("value", nAngle); // adjust d3.js text holder.select("text.d3js") .attr("transform", "translate(300,55) rotate("+nAngle+")"); // adjust d3noob.org text holder.select("text.d3noob") .attr("transform", "translate(300,130) rotate("+(360 - nAngle)+")"); } </script>