ch.10 상호작용 d3.js Moon.D
d3.js Moon.D
.on(“mouseover”)
.on("mouseover", function() {
d3.select(this)
.attr("fill", "orange");
});
this : 작업중인 문서요소
이벤트 명 실행할 함수
d3.js Moon.D
.on(“mouseout”)
.on("mouseout", function(d) {
d3.select(this)
.attr("fill", "rgb(0, 0, " + (d * 10) + ")");
});
d3.js Moon.D
sortBars()
d3.select(“p")
.on("click", function() {
sortBars();
});
“p”를 클릭하면 다음의 함수를 실행한다
d3.js Moon.D
var sortBars = function() {
svg.selectAll("rect")
.sort(function(a, b) {
return d3.ascending(a, b);
})
.transition()
.duration(1000)
.attr("x", function(d, i) {
return xScale(i);
});
// 모든 rect를 선택한다
d3.js Moon.D
.sort(function(a, b) {
return d3.ascending(a, b);
})
sort() 데이터 값을 기반으로 재정렬
//(a, b) 코딩 관습
d3.ascending(a, b) 비교 함수
• 값이 큰 쪽을 내보냄
• 모든 데이터 에서 순회
d3.js Moon.D
svg.selectAll("rect")
.sort(function(a, b) {
return d3.ascending(a, b);
})
.transition()
.duration(1000)
.attr("x", function(d, i) {
return xScale(i)+ xScale.rangeBand() / 2;;
});
// 모든 text(라벨)를 선택한다
라벨도 정렬하자
d3.js Moon.D
var sortOrder = false;
var sortBars = function() {
sortOrder = !sortOrder;
svg.selectAll("rect")
.sort(function(a, b) {
if (sortOrder) {
return d3.ascending(a, b);
} else {
return d3.descending(a, b);
}
})
// 블리언 변수 : 차트의 현재 상태를 기억
// 클릭할때마다 false - true 로 번갈아 바뀐다
// sortOrder = true 일때
// sortOrder = false 일때
d3.js Moon.D
1. HTML div 생성
<div id="tooltip" class="hidden">
<p><strong>아래에 라벨이 표시됩니다.</strong></p>
<p><span id="value">100</span>%</p>
</div>