【问题标题】:How to keep x-axis in fixed position while scrolling using d3.js?使用 d3.js 滚动时如何将 x 轴保持在固定位置?
【发布时间】:2018-03-01 05:50:36
【问题描述】:

我有一个 d3 矩阵,带有 x 轴和 y 轴。我的 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);}) 
  ;

【问题讨论】:

    标签: javascript html css d3.js svg


    【解决方案1】:

    这样做的一个好方法是创建一个标题 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 库:

    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"&gt;&lt;/script&gt;

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

    此外,您可能希望使用以下滚动魔术库添加指示符以显示场景的开始和结束位置:

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多