Skip to content

Instantly share code, notes, and snippets.

@mpmckenna8
Last active June 11, 2017 18:43
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 mpmckenna8/c3812e5d6c7ac688b22c14c780711e28 to your computer and use it in GitHub Desktop.
Save mpmckenna8/c3812e5d6c7ac688b22c14c780711e28 to your computer and use it in GitHub Desktop.
Color Selection Issue
license: mit
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
</style>
</head>
<body>
<script>
const squareSize = 20,
gridSize = 25,
width = squareSize*gridSize,
height = squareSize*gridSize;
const svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height)
const graphic = {
color: function(){
const hue = (Math.random()*230) + 135,
saturation = (Math.random()*20) + 46,
lum = (Math.random()*20) + 55;
},
buildData:function(){
let result = [];
for (let i = 0; i < gridSize; i++){
let row = [];
for(let j =0; j < gridSize; j++){
row.push(Math.random().toFixed(1))
}
result.push(row)
}
console.log(result)
return result;
},
buildGrid: function(data){
const update = svg.selectAll('g')
.data(data)
const enter = update.enter()
.append('g')
.attr('class', (d, i) => ("ger" + i))
.attr("transform", function(d, i) {
return "translate(" + (i * squareSize) + ', ' + 0 + ")" })
update.merge(enter)
.selectAll('rect')
.data((d) => {return d})
.enter()
.append('rect')
.attr('class', 'square')
.attr('y', (d, i) => {return i * squareSize})
.attr('width', (d) => {return squareSize})
.attr('height', (d) => {return squareSize})
.attr('fill', (d) => {return d3.hcl(200, 50, (d*150))})
.on('click', function (d) {
//here's the problem
//each of these log somehting differnet, I do not know what
//is best for traversing the groups
// console.log(d3.select('rect').node())
console.log(d3.select(this))
console.log('this is, ', this.parentNode, 'd is = ', d)
// console.log(d3.select('rect'));
var thissel = d3.select(this.parentNode)
thissel.selectAll('rect').style('fill', 'red')
//this line will convert the first square to red
//despite where you click
// d3.select(this.square).style('fill', 'red')
//this line will log a d3 style selection
//but is undefined
})
const exit = update.exit().remove();
},
propogate: function(){
}
}
graphic.buildGrid(graphic.buildData())
</script>
</body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment