d3:如何在水平方向上移动垂直线并​​支持暂停'并且'继续'运动

时间:2018-05-30 13:09:39

标签: javascript d3.js

我想在水平方向上移动一条垂直线,并支持暂停'并且'继续'运动。当我点击暂停'按钮,线停止移动;当'继续'时,线继续移动。

现在,我使用' transition'用于实现从左到右的水平过渡,但不知道如何暂停'并且'继续'。

这是我的演示:

<html>
<head>
    <script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
  <svg width="500" height="500">
    <line x1="100" y1="0" x2="100" y2="100" stroke="black"/>
  </svg>
</body>

<script>
  d3.select("line").transition()
    .ease(d3.easeLinear)
    .duration(2000)
    .attr("x1",200)
    .attr("x2",200);
</script>
</html>

是否可以暂停&#39;过渡或如何使用其他方式实现这一目标,而不使用过渡&#39;功能

1 个答案:

答案 0 :(得分:1)

以下是一种方法:

&#13;
&#13;
<html>
<head>
    <script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>

  <div class="control-buttons">
    <button class="pause">
      Pause
    </button>
    <button class="continue">
      Continue
    </button>    
  </div>
  <svg width="1000" height="500">
    <line x1="100" y1="0" x2="100" y2="100" stroke="black"/>
  </svg>
</body>

<script>   
  // pause
  d3.select('button.pause').on('click', function() {
  	d3.select("line").interrupt();
  });
  
  d3.select('button.continue').on('click', function() {
   d3.select("line").transition()
      .ease(d3.easeLinear)
      .duration(10000)
      .attr("x1",800)
      .attr("x2",800);
  }).dispatch('click');
  
</script>
</html>
&#13;
&#13;
&#13;

d3-transition-interrupt是您应该寻找的。我已将其用于暂停按钮,并且继续按钮单击刚刚重新启用相同的转换。要开始转换,请单击“继续”按钮。

这只是一个基本版本,但我希望逻辑足够清晰。希望这会有所帮助。