D3 не хочет перерисовывать

121
09 августа 2019, 04:10

Друзья, помогите пожалуйста!

Сделал простенькую гистограмму - хочу чтобы она ресайзилась автоматом при изменении размеров окна браузера. Оформил примерно такой код:

const data = new Array(20).fill(0).map(v => Math.random() * 50);
const redraw = () => {
  const width = d3.select('.bar-chart').node().clientWidth;
  console.log('FIRE_REDRAW', width);
  const yScale = d3
    .scaleLinear()
    .domain([0, 50])
    .range([100, 300])
    .nice();
  const sections = d3
    .select('.bar-chart')
    .selectAll('div')
    .data(data);
  sections
    .enter()
    .append('div')
    .classed('cubic', true)
    .style('height', d => `${yScale(d)}px`)
    .style('width', d => `${width / data.length - 3}px`) 
}
redraw();
window.addEventListener("resize", redraw);

Функция redraw вызывается, но увы график не перерисовывается. Что я упустил?

Код выложил в песочницу https://codepen.io/anon/pen/OrdWXw

Answer 1

Я бы сделал так:

    const data = new Array(20).fill(0).map(v => Math.random() * 50); 
 
    const yScale = d3.scaleLinear() 
        .domain([0, 50]).range([100, 300]) 
        .nice(); 
 
    const sections = d3 
        .select('.bar-chart') 
        .selectAll('div') 
        .data(data) 
        .enter() 
        .append('div') 
        .classed('cubic', true); 
 
    const redraw = () => { 
   
        const width = d3.select('.bar-chart').node().clientWidth; 
 
        sections 
            .style('height', d => `${yScale(d)}px`) 
            .style('width', d => `${width / data.length - 3}px`) 
    } 
 
    redraw(); 
    window.addEventListener("resize", redraw);
svg { 
  border: 1px solid #000; 
} 
 
.cubic { 
    background-color: #F00;     
    display: inline-block; 
    width: 20px; 
    margin-right: 2px; 
    position: relative; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script> 
<div class="bar-chart"> 
  
</div>

codepen

READ ALSO
Включить клик js в ссылку

Включить клик js в ссылку

На одной странице сайта есть ссылка-спойлер, то есть при клике на нее под ней появляется блок: с помощью js кода идет подмена стиля с display:none...

129
Как передать id button-а из html в js объект?

Как передать id button-а из html в js объект?

Помогите пожалустаИмею такую ситуацию, есть две кнопки с разными id в HTML файлe, мне нужно взять все id всех кнопок с классом

131