<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="//d3js.org/d3.v4.min.js"></script>
<style>
.chart {
background: lightgray;
border: 1px solid black;
min-width: 200px;
min-height: 350px;
}
.bar {
height: 30px;
color: white;
fill: lightgreen;
stroke: black;
stroke-width: 1;
}
.barOn {
stroke: gold;
transform: scaleX(1.1);
}
</style>
<title>D3V4</title>
</head>
<body>
<div class="chart">
</div>
<script type="text/javascript" charset="utf-8">
var scores = [
{ name: 'Alice', score: 96 },
{ name: 'Billy', score: 83 },
{ name: 'Cindy', score: 91 },
{ name: 'David', score: 96 },
{ name: 'Emily', score: 88 }
];
const bars = d3.select('.chart')
.append('svg')
.attr('width', 300)
.attr('height', 300)
.style('background', 'white')
.selectAll('g')
.data(scores)
.enter()
.append('g')
.attr('transform', (d, i) => 'translate(0, ' + i * 33 + ')');
bars.append('rect')
.attr('width', d => d.score)
.attr('class', 'bar')
.on('mouseover', function(d, i, elements) {
// transform the hover item to scale 1.1
d3.select(this).classed('barOn', true);
// set not hover elements to opacity 0.8
d3.selectAll(elements)
.filter(':not(:hover)')
.style('opacity', 0.6);
})
.on('mouseout', function(d, i, elements) {
d3.select(this).classed('barOn', false);
d3.selectAll(elements)
.style('opacity', 1);
});
bars.append('text')
.text(d => d.name)
.attr('y', 20)
</script>
</body>
</html>
// Code goes here
/* Styles go here */