Built with blockbuilder.org
forked from anonymous's block: Intro to D3 Live Coding
Built with blockbuilder.org
forked from anonymous's block: Intro to D3 Live Coding
| <!DOCTYPE html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script> | |
| <style> | |
| .label { | |
| margin-left: 20px; | |
| } | |
| .update { | |
| margin: 20px; | |
| } | |
| svg { | |
| margin: 20px; | |
| height: 500px; | |
| display: block; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <span class="label label-default">Data</span> <span class="data"></span> | |
| <button class='update btn btn-default'>update</button> | |
| <svg></svg> | |
| <script> | |
| function randomData(length) { | |
| var data = _.map(_.range(length), function() { | |
| return _.random(1, 500); | |
| }); | |
| $('.data').text(JSON.stringify(data)); | |
| return data; | |
| } | |
| var data = randomData(_.random(1, 10)); | |
| var g = d3.select('svg').append('g'), | |
| color = d3.scale.category20(), | |
| width = 20, | |
| height = 500; | |
| var rect = g.selectAll('rect') | |
| .data(data).enter().append('rect') | |
| .attr('x', function(d, i) {return i * width}) | |
| .attr('y', function(d) {return height - d}) | |
| .attr('width', width) | |
| .attr('height', function(d) {return d}) | |
| .attr('fill', color); | |
| $('.update').click(function() { | |
| data = randomData(_.random(1, 10)); | |
| rect = g.selectAll('rect') | |
| .data(data); | |
| // enter new rect | |
| rect.enter().append('rect'); | |
| // exit rect no longer needed | |
| rect.exit().remove(); | |
| // update attributes on all the bars that still remain | |
| rect.transition().duration(500) | |
| .attr('x', function(d, i) {return i * width}) | |
| .attr('y', function(d) {return height - d}) | |
| .attr('width', width) | |
| .attr('height', function(d) {return d}) | |
| .attr('fill', color); | |
| }); | |
| </script> | |
| </body> |