Skip to content

Instantly share code, notes, and snippets.

@curran
Last active May 19, 2016 17:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save curran/05d933ea4697fddaf7f4a0d41a85ef59 to your computer and use it in GitHub Desktop.
Save curran/05d933ea4697fddaf7f4a0d41a85ef59 to your computer and use it in GitHub Desktop.
Nunchuks
license: mit

An example of the concept of nested SVG <g> elements, each having their own transform. This shows how the transforms nest such that the parent transform is applied to all children.

Built with blockbuilder.org

web counter
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
svg { width:100%; height: 100% }
line {
stroke: black;
stroke-width: 30px;
stroke-linecap: round;
}
</style>
</head>
<body>
<script>
var width = 960;
var height = 500;
var scaleFactor = 0.6;
var svg = d3.select('body').append('svg')
.attr({width: width, height: height});
var g = svg.append('g')
.attr('transform', 'translate('+(width/2)+', '+(height/2)+')');
function t(selection){
selection.append('line')
.attr('x1', -100)
.attr('y1', 0)
.attr('x2', 100)
.attr('y2', 0);
}
var g1 = g.append('g').call(t);
var g2 = g1.append('g').call(t);
var g3 = g2.append('g').call(t);
var g4 = g3.append('g').call(t);
var rotation = 0;
function animate(){
g1.attr('transform', 'rotate('+rotation+')');
g2.attr('transform', 'translate(100, 0) rotate('+rotation*2+') scale('+scaleFactor+')');
g3.attr('transform', 'translate(100, 0) rotate('+rotation*4+') scale('+scaleFactor+')');
g4.attr('transform', 'translate(100, 0) rotate('+rotation*8+') scale('+scaleFactor+')');
rotation += 1;
requestAnimationFrame(animate);
}
animate();
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment