使用d3.js滚动时如何将x轴保持在固定位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用d3.js滚动时如何将x轴保持在固定位置?相关的知识,希望对你有一定的参考价值。

我有一个d3矩阵,有一个x和y轴。我的y轴非常长,所以我想在滚动时仍能看到我的x轴。我希望这个职位“固定”。但添加.style(“位置”,“固定”)似乎并没有成功。简单来说,我想做excel在冻结行/列时所做的事情。

我有以下代码:

  var columnLabels = svg.append("g")
  .selectAll(".columnLabelg")
  .data(columnLabel)
  .enter()
  .append("text")
  .text(function(d) { return d; })
  .attr("x", function(d, i) { return i * cellSize; })
  .attr("y", -1)
  .style("text-anchor", "right")
  .attr("transform", function(d, i) { 
      return "translate(" + i + ",-6)"
             + "rotate(300 "+ i * cellSize + " " + (-6) +")"; })


  .attr("class",  function (d,i) { return "columnLabel mono c"+i;} )
  .on("mouseover", function(d) {d3.select(this).classed("text-hover",true);})
  .on("mouseout" , function(d) {d3.select(this).classed("text-hover",false);}) 
  ;
答案

这样做的一个好方法是创建一个标题div,然后在整个滚动过程中在屏幕顶部粘贴。您可以在其中显示您喜欢的任何内容,保持粘性,并且如果您使用类似scrollmagic的内容,则通常会滚动浏览矩阵的其余部分,这需要一些额外的javascript

例如,如果您创建一个容器div,在里面添加列标签,并将其固定到屏幕顶部,那么事情应该可行。

例如:

var labelContainer = d3.select("div.label-container")

//Let's pretend that you've create the labels thus:
var columnLabels = labelContainer
  .selectAll(".columnLabel")
  .data(columnLabel)
  .enter()
  .append("div")
  .attr("class", "label")


//Now let's create a scrollmagic scene, the duration of which will let you set the length during which the element is sticky on scroll.

var controller = new ScrollMagic.Controller();

$(function() { // wait for document ready

  // build scene
  var scene = new ScrollMagic.Scene({
      triggerElement: "#trigger1",
      duration: 300
    })
    .setPin("#pin1")
    .addIndicators({
      name: "1 (duration: 300)"
    }) // add indicators (requires plugin)
    .addTo(controller);
});
<div id="trigger1" class="label-container">

  <div class="label"></div>
  <div class="label"></div>

</div>
<div class="svg-container">
  <svg class="svg-viz"></svg>
</div>

以上是关于使用d3.js滚动时如何将x轴保持在固定位置?的主要内容,如果未能解决你的问题,请参考以下文章

无需使用d3.js重新渲染数据的无限滚动条形图[关闭]

在 D3.js 中创建带有序数刻度的文本标记 x 轴

如何将标题固定在仅在 x 维度上滚动的 UIScrollView 之上?

如何使div(flexbox)在滚动时保持在固定位置(使用div做表)

保持视差固定但在滚动时更改图像?

处理 d3.js 轴上的日期