D3.js - Score card
http://codepen.io/andresfulla/pen/eNbWxV
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<div class="graph"></div>
CSS
@import url(http://fonts.googleapis.com/css?family=Ubuntu);
body {
padding: .1px;
height: 100vh;
}
.graph {
padding: 1em 2em 1.5em;
background-color: #263827;
width: 50%;
border-radius: 5px;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
-webkit-transition: opacity 1s linear;
transition: opacity 1s linear;
box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.3);
}
.name {
color: #fff;
top: 0;
font-family: Ubuntu, sans-serif;
text-transform: uppercase;
margin-top: 1.5em;
}
.name .score {
color: rgba(255, 255, 255, 0.5);
}
.bar {
width: 100%;
height: 30px;
background-color: #294d5a;
margin: 1em 0;
border-radius: 30px;
position: relative;
overflow: hidden;
}
.bar .infoBar {
content:"";
display: block;
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 30px;
background: -webkit-linear-gradient(left, #3a7bd3, #4d71da);
background: linear-gradient(to right, #3a7bd3, #4d71da);
border-radius: 30px 30px 30px 30px;
box-shadow: 0 0 20px 5px rgba(38, 56, 39, 0.7);
}
JavaScript
(function () {
var graph = d3.select('.graph');
var data = [{
'name': 'Jose',
'score': 50
}, {
'name': 'M.J',
'score': 20
}, {
'name': 'Gabi',
'score': 100
}, {
'name': 'Loki',
'score': 13
}];
var containerBars = graph.selectAll('div').data(data).enter().append('div');
var xScale = d3.scale.linear().range([100, 0]);
var xMin = 0;
var xMax = 100;
xScale.domain([xMin, xMax]);
containerBars.append('p').attr('class', 'name').text(function (data) {
return data.name;
}).append('span').attr('class', 'score').text(function (data) {
return ' (' + data.score + ')';
});
var bars = containerBars.append('div').attr({
'class': 'bar'
});
var infoBar = bars.append('div').attr({
'class': 'infoBar'
}).style('left', function (data) {
return '-100%';
});
infoBar.transition().duration(1500).ease('cubic-out').style({
'left': function (data) {
return -xScale(data.score) + '%';
}
});
}());