我有一个带有x和y轴的d3矩阵。我的y轴很长,因此我希望在滚动时仍能看到x轴。我想把这个位置“固定”。但是添加.style(“ position”,“ fixed”)似乎并不能解决问题。简而言之,当冻结行/列时,我想执行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之外,您还需要加载Scrollmagic和jquery库:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.min.js"></script>


另外,您可能想使用以下scrollmagic库添加指示器以向您显示场景的开始和结束位置:

<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.min.js"></script>


您可以在此处阅读有关scrollmagic固定的更多信息:http://scrollmagic.io/examples/basic/simple_pinning.html

10-08 00:56