Skip to content

Instantly share code, notes, and snippets.

@chule
Last active September 11, 2019 11:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chule/bd2bc658776cb844a4b1cfa631805599 to your computer and use it in GitHub Desktop.
Save chule/bd2bc658776cb844a4b1cfa631805599 to your computer and use it in GitHub Desktop.
selection.join
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v5.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<script>
// Feel free to change or delete any of the code you see in this editor!
var svg = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 500)
var letters = svg.append("g")
.attr("transform","translate(200, 200)")
function randomLetters() {
return d3.shuffle("abcdefghijklmnopqrstuvwxyz".split(""))
.slice(0, Math.floor(6 + Math.random() * 20))
.sort();
}
const t = letters.transition()
.duration(750);
function runLetters(){
letters.selectAll("text")
.data(randomLetters(), d => d)
.join(
enter => enter.append("text")
.attr("fill", "green")
.style("font-size", 36)
.style("font-family", "monospace")
.attr("x", (d, i) => i * 22)
.attr("y", -30)
.text(d => d)
.call(enter => enter.transition(t)
.attr("y", 0)),
update => update
.attr("fill", "black")
.attr("y", 0)
.call(update => update.transition(t)
.attr("x", (d, i) => i * 22)),
exit => exit
.attr("fill", "brown")
.call(exit => exit.transition(t)
.attr("y", 30)
.remove())
);
}
runLetters();
window.setInterval(function (){
runLetters();
}, 2500)
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment