Color Field pt-br Explainer

Explicação de Campo de cores

Objetivo do desafio:
Este desafio usa conceitos de JavaScript previamente ensinados (variáveis e manipuladores de eventos) com conceitos de D3 previamente ensinados (método de transição, método de duração e atributo de preenchimento).

Especificamente, você usará um manipulador de eventos e uma variável para animar o atributo de mudança 'fill' de uma forma SVG.

Passo a passo da solução:
No código com o qual você começa, existem duas funções, changeBottom e changeTop, e dois manipuladores de eventos. A função changeBottom cria a variável randomColor e define uma animação de .transition() incompleta em bottom. A animação não está completa porque falta um atributo e um valor para que bottom faça a transição. A função changeTop faz a mesma coisa, mas com a variável top. Abaixo destas funções estão dois manipuladores de eventos que especificam qual função chamar quando se toca em top e bottom. Em seu estado atual, nada acontece quando se toca no retângulo. Neste desafio, você completará as animações dentro das funções, de modo a animar o retângulo quando se toca nele.

Para concluir o desafio, anexe .attr('fill', randomColor) a .duration(2000) dentro das funções changeTop e changeBottom. Agora, quando você toca na parte superior ou inferior do retângulo, seu valor de cor mudará.

Solução do código de exemplo:
(Toque abaixo para revelar)

function changeBottom () {
    let randomColor = d3.rgb(pickRandom(255), pickRandom(255), pickRandom(255));
    bottom.transition().duration(2000).attr('fill', randomColor)
}

function changeTop () {
    let randomColor = d3.rgb(pickRandom(255), pickRandom(255), pickRandom(255));
    top.transition().duration(2000).attr('fill', randomColor)
}

bottom.on('click', changeBottom)
top.on('click', changeTop)

Conceitos de JavaScript: Variável, Manipuladores de Eventos, Declaração de Função
Conceitos de D3: Atributo, .transition(), .duration()
Código Adicional (código oculto executado antes do código do desafio):
[detalhes]

var svg = canvas.append('g');

svg.attr('transform',`translate(${window.innerWidth/2},${window.innerHeight/2})`);

let bottom = svg.append('rect').attr('width', '160').attr('height', '70').attr('fill', 'rgb(255,112,54)').attr('x', -70).attr('y',40)
let top = svg.append('rect').attr('width', '160').attr('height', '135').attr('fill', 'rgb(248,169,51)').attr('x', -70).attr('y',-100)

[/details]