Built with blockbuilder.org
forked from ropeladder's block: Click vs Drag v4
license: gpl-3.0 |
Built with blockbuilder.org
forked from ropeladder's block: Click vs Drag v4
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<style> | |
html, | |
body { | |
height: 100%; | |
margin: 0; | |
overflow: hidden; | |
} | |
svg { | |
position: absolute; | |
} | |
</style> | |
<body> | |
<script src="//d3js.org/d3.v4.min.js"></script> | |
<script> | |
var width = self.frameElement ? 960 : innerWidth, | |
height = self.frameElement ? 500 : innerHeight; | |
var data = d3.range(20).map(function() { return [Math.random() * width, Math.random() * height]; }); | |
var color = d3.scaleOrdinal(d3.schemeCategory10); | |
var drag = d3.drag() | |
.subject(function(d) { return {x: d[0], y: d[1]}; }) | |
.on("drag", dragged); | |
d3.select("body") | |
.on("touchstart", nozoom) | |
.on("touchmove", nozoom) | |
.append("svg") | |
.attr("width", width) | |
.attr("height", height) | |
.selectAll("circle") | |
.data(data) | |
.enter().append("circle") | |
.attr("transform", function(d) { return "translate(" + d + ")"; }) | |
.attr("r", 32) | |
.style("fill", function(d, i) { return color(i); }) | |
.on("mouseup", mouseup) | |
.call(drag); | |
function dragged(d) { | |
d[0] = d3.event.x, d[1] = d3.event.y; | |
if (this.nextSibling) this.parentNode.appendChild(this); | |
d3.select(this).attr("transform", "translate(" + d + ")"); | |
} | |
function mouseup(d, i) { | |
if (d3.event.defaultPrevented) return; // dragged | |
d3.select(this).transition() | |
.style("fill", "black") | |
.attr("r", 64) | |
.transition() | |
.attr("r", 32) | |
.style("fill", color(i)); | |
} | |
function nozoom() { | |
d3.event.preventDefault(); | |
} | |
</script> |