簡體   English   中英

D3.js圖表​​響應行為

[英]D3.js chart responsive behavior

當窗口寬度更改時,我試圖設置偵聽器以使用jQuery更改圖表寬度:

// Get width of parent div with jQuery

var widthContainer = $( ".chart" ).parent().width();

//set margins
// margin conventions https://bl.ocks.org/mbostock/3019563

var margin = {top: 0, right: 0, bottom: 30, left: 40};
var width = widthContainer - margin.left - margin.right;
var height = 211 - margin.top - margin.bottom;

// set chart dimensions

var chart = d3.select(".chart")
    .attr("width", width + margin.left + margin.right)
    .attr("height", height + margin.top + margin.bottom)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");


// listener

function changeWidth(){
   widthContainer = $( ".chart" ).parent().width();
   width = widthContainer - margin.left - margin.right;
}

$(window).resize(function(){
  changeWidth();
  console.log(widthContainer);
});

changeWidth()函數更改widthContainer變量,但圖表尺寸不變。 為什么?

這是一個有效的Codepen(第13至40行): http ://codepen.io/aitormendez/pen/LbRyWa?editors=0011

先感謝您

您當前的changeWidth()僅計算新寬度。 您需要將新寬度設置為所需的元素。 而且,您還需要更新圖表的x比例並重新繪制圖表。

快速更新您的Codepen(我將changeWidth移至底部並調整大小,再添加重繪功能)。

var redraw = function(newWidth) {
  // update xscale
  escalax.range([0, newWidth]);
  d3.select('.xaxis').call(xAxis);
  deuda.selectAll("rect")
    .attr("width", function(d) {
      return rr(escalax(d[1]));
    });
  recono.selectAll("rect")
    .attr("x", function(d) {
      return rr(escalax(d[1]));
    })
    .attr("width", function(d) {
      return rr(escalax(d[2]));
    });
  provee.selectAll("rect")
    .attr("x", function(d) {
      return rr(escalax(d[1] + d[2]));
    })
    .attr("width", function(d) {
      return rr(escalax(d[3]));
    });
  credito.selectAll("rect")
    .attr("x", function(d) {
      return rr(escalax(d[1] + d[2] + d[3]));
    })
    .attr("width", function(d) {
      return rr(escalax(d[3]));
    });
}

function changeWidth() {
  widthContainer = $(".chart").parent().width();
  width = widthContainer - margin.left - margin.right;

  // update chart width
  d3.select('.chart')
    .attr('width', width);

  // redraw chart
  redraw(width);
}

$(window).resize(function() {
  changeWidth();
  console.log(widthContainer);
});

http://codepen.io/anon/pen/JbboQL?editors=1010

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM