首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何打开对SVG javascript d3的模态单击

问如何打开对SVG javascript d3的模态单击
EN

Stack Overflow用户
提问于 2017-05-07 16:33:28
回答 1查看 2.8K关注 0票数 0

我正在使用javascript和d3进行数据可视化处理。在本文中,我使用各种图表显示数据(数据来自外部源)。我是这门语言的新手,所以我使用了来自互联网不同部分的代码,很多工作都来自于编辑这些代码,以使它们彼此兼容。

我成功地部署了图表(对于我来说,这是一个很大的成就,因为我在一周前刚开始使用javascript和HTML )。现在我想在点击图表的条形图或者至少在标签上打开一个模态,但是我遇到了一些麻烦。

图表上的条形图是这样定义的:

代码语言:javascript
复制
  var vakken = svg.selectAll(".question")
  .data(data)
.enter().append("g")
  .attr("class", "bar")
  .attr("transform", function(d) { return "translate(0," + y(d.Question) + ")"; });

var bars = vakken.selectAll("rect")
  .data(function(d) { return d.boxes; })
.enter().append("g").attr("class", "subbar");

bars.append("rect")
  .attr("height", 16)
  .attr("x", function(d) { return (x(d.x0)); })
  .attr("width", function(d) { return (x(d.x1) - x(d.x0)); })
  .style("fill", function(d) { return color(d.name); });

任何关于如何实现这一目标的评论都将受到赞赏(并且可以随意嘲笑我,这是我应得的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-07 16:49:27

您可以将图表中的条形图定义为'rect‘dom元素(与’bars.append(.)‘并列)。作为每个dom元素,您可以通过JavaScript访问它。要访问这些条,您必须添加一个id或类,例如:

代码语言:javascript
复制
bars.append("rect").attr("id", "bar01")...

然后访问它并添加onclick事件:

代码语言:javascript
复制
$("#bar01").click(function(e) { ... });

或者用纯JS:

代码语言:javascript
复制
document.getElementById("bar01").onclick = function(e) { ... };

希望能帮上忙..。

编辑:我忘了你的问题,如何打开一个模态对话框。有几种方法可以实现打开一个模态对话框。最简单的方法是使用像materializecss之类的库或类似的东西。然而,有很多东西将应用于您的项目。

下面是一个简单的示例,您如何使用jQuery实现它,因为jQuery暂时保持了函数的简单性。

首先,您必须添加一个div元素,放在屏幕的中央。默认情况下,这个div元素是隐藏的:

代码语言:javascript
复制
// HTML
<div id="modal01" class="modal">Blabla</div>

// CSS
.modal {
  position: absolute;
  left: ...
  ...
  display: none;
  z-index: 10;
}

Z-索引用于保证您的模式对话框位于页面的前面。

为了避免单击其他元素,我们使用了一个使用整个屏幕的进一步div:

代码语言:javascript
复制
// HTML
<div id="box" class="modal-box"></div>

// CSS
.modal-box {
  position: absolute;
  left: 0px;
  top: 0px;
  width: 100%;
  height: 100%;
  z-index: 5;
  display: none
}

默认情况下,此box也是隐藏的。当您单击该条时,将同时显示两个div,例如:

代码语言:javascript
复制
$("#bar01").click(function (e) {
  $("#modal01").show();
  $("#box").show();
});

如果单击该框,模式将被关闭(例如):

代码语言:javascript
复制
$("#box").click(function (e) {
  $("#modal01").hide();
  $("#box").hide();
});

我认为,你找到了进一步的步骤;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43833937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档