javascript - 为什么 .each() 在 D3 中不起作用?

标签 javascript d3.js

我有一列按钮。当用户单击一个按钮时,我想显示一条消息,并在几秒钟后隐藏它。

Jsfiddle

HTML

<div class="wrapper">
  <div class="add">
    Add
    <span class="message"></span>
  </div>
  <div class="add">
    Add
    <span class="message"></span>
  </div>
</div

D3

d3.select(".add")
  .on("click", function() {
    d3.selectAll(".message")
      .each(function() {
        d3.select(this)
          .transition()
          .duration(500)
          .style("opacity", 1)
          .text("added");
     })
   })

我有两个问题:

  1. 单击“添加”按钮时,将显示所有消息,而不是单击按钮旁边的消息。我使用 .each 的方式有问题吗?

  2. 一段时间后我无法隐藏消息。我尝试使用 delayfadeOut 但它破坏了整个功能。

非常感谢任何帮助。

片段

d3.selectAll(".add")
  .on("click", function() {
    d3.selectAll(".message")
      .each(function() {
        d3.select(this)
          .transition()
          .duration(500)
          .style("opacity", 1)
          .text("added");
      })
  })
.wrapper {
  display: inline-block;
  margin: 50px;
  width: 200px;
}
.wrapper div {
  padding: 16px 32px;
  background-color: grey;
  color: #FFF;
  font-family: sans-serif;
  cursor: pointer;
  text-align: center;
  margin-bottom: 5px;
  position: relative;
}
.wrapper span {
  position: absolute;
  right: -60px;
  bottom: 10px;
  background-color: lightblue;
  color: black;
  font-size: 12px;
  padding: 8px 16px;
  opacity: 0;
}
<script src="https://d3js.org/d3.v3.min.js"></script>
<div class="wrapper">
  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

</div>

最佳答案

下面是我的编码方式:

d3.selectAll(".add")
    .on("click", function() {
      var m = d3.select(this.children[0]);
      m.text("added")
        .style("opacity", 1);
      m.transition()
        .delay(500)
        .duration(1000)
        .style("opacity", 0);
   });

运行:

d3.selectAll(".add")
  .on("click", function() {
    var m = d3.select(this.children[0]);
    m.text("added")
      .style("opacity", 1);
    m.transition()
      .delay(500)
      .duration(1000)
      .style("opacity", 0);
  })
.wrapper {
  display: inline-block;
  margin: 50px;
  width: 200px;
}
.wrapper div {
  padding: 16px 32px;
  background-color: grey;
  color: #FFF;
  font-family: sans-serif;
  cursor: pointer;
  text-align: center;
  margin-bottom: 5px;
  position: relative;
}
.wrapper span {
  position: absolute;
  right: -60px;
  bottom: 10px;
  background-color: white;
  color: black;
  font-size: 12px;
  padding: 8px 16px;
  opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div class="wrapper">
  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

  <div class="add">
    Add
    <span class="message"></span>
  </div>

</div>

关于javascript - 为什么 .each() 在 D3 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810167/

相关文章:

javascript - 如何在 HighChart 中设置 y 轴?

javascript - Knockoutjs ObservableArray 的大小不断翻倍

javascript - 如何打开模态点击 SVG javascript d3

d3.js - 在此图像上看到的 d3j.s 力定向图集群示例发生了什么?

d3.js - 以编程方式缩放后使用鼠标滚轮时 D3.zoom 跳转

javascript - Datamaps 获取国家代码列表

javascript - d3 - 具有自定义 DOM 元素的多个重叠图表

javascript - React中箭头函数的优化

javascript - 省略 Order to create "average"Google Chart API 中的一些行

php - 创建图像网格