Scale inversion example.
From D3 in Depth book by Peter Cook.
license: gpl-3.0 | |
height: 100 | |
border: no |
Scale inversion example.
From D3 in Depth book by Peter Cook.
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<head> | |
<title>Scale inversion</title> | |
</head> | |
<style> | |
body { | |
font-family: "Helvetica Neue", Helvetica, sans-serif; | |
font-size: 12px; | |
} | |
rect { | |
fill: #ccc; | |
cursor: pointer; | |
} | |
.info { | |
margin-left: 20px; | |
} | |
</style> | |
<body> | |
<svg width="700" height="80"> | |
<g transform="translate(20, 10)"> | |
<g class="axis" transform="translate(0, 40)"></g> | |
<rect class="click-area"></rect> | |
</g> | |
</svg> | |
<div class="info">Click on the grey band</div> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.2/d3.min.js"></script> | |
<script> | |
var width = 600; | |
var linearScale = d3.scaleLinear() | |
.domain([-50, 50]) | |
.range([0, width]) | |
.nice(); | |
var clickArea = d3.select('.click-area').node(); | |
function doClick() { | |
var pos = d3.mouse(clickArea); | |
var xPos = pos[0]; | |
var value = linearScale.invert(xPos); | |
d3.select('.info') | |
.text('You clicked ' + value.toFixed(2)); | |
} | |
// Construct axis | |
var axis = d3.axisBottom(linearScale); | |
d3.select('.axis') | |
.call(axis); | |
// Update click area size | |
d3.select('.click-area') | |
.attr('width', width) | |
.attr('height', 40) | |
.on('click', doClick); | |
</script> | |
</body> | |
</html> |