- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
堆积面积图示例 http://nvd3.org/ghpages/stackedArea.html
当我点击一个系列时,它会扩展到所有图表区域,删除其他系列。如何禁用此功能?
最佳答案
没有任何 NVD3 图表选项可以覆盖此行为,但您可以直接覆盖点击事件处理程序。但是,使用堆积面积图会变得有点复杂...
NVD3 使用 d3.dispatch
对象来处理自定义事件。用户点击和鼠标悬停以及相关操作都被转换为这些自定义事件。
如果你想让一个函数在自定义事件之后发生,你可以调用调度对象的.on(eventName, function)
方法。如果函数参数为 null
,它会取消任何以前附加到该名称的事件处理函数。 (如果你想让同一个事件触发多个函数,你可以在事件名称中添加一个“命名空间”,使用“eventName.namespace”
形式的字符串作为第一个参数;即只有当 on
使用完全相同的事件名称字符串再次调用时,函数才会被取消。)
所以要取消你不想要的行为,你需要检查源代码找出触发该行为的自定义事件的名称,并调用调度对象的 on
具有该名称和空函数的方法。
这就是事情变得复杂的地方。实际上有多个不同的事件会导致数据系列打开和关闭。如果您单击该区域,如果您单击图例,或者如果您单击鼠标悬停时出现的散点圆之一,您将获得相同的行为。所以所有这些事件都必须被覆盖。而且它们甚至不是同一个调度对象的所有部分:主图表对象本身有一个调度对象来处理通过单击图表布局控件创建的完整重绘事件,但堆叠区域上的单击事件由内部处理绘制绘图区域的图表函数,散点上的点击事件由其中的内部图表函数处理,图例上的点击事件在图例函数中处理。
这就是它变得真正复杂的地方。当整个图表更新或其布局发生变化时,绘图区域和散点图的那些内部图表绘制函数会被主图表函数覆盖。这意味着所有事件都将重置为其 NVD3 默认值。
因此,您不仅必须禁用所有触发该行为的事件,还必须修改更新函数以再次禁用它们。并且由于更新函数本身在每次更新时都会重置,*您需要将更新函数的修改作为用于禁用事件的函数的一部分。
**更新函数只是使用相同的容器选择重新调用整个图表绘制函数。图表函数的第一行之一创建了更新函数。*
这是代码,基于 nvd3.org live code page 上的 Stacked Area 示例:
nv.addGraph(function() {
/* Set up chart as normal */
var chart = nv.models.stackedAreaChart()
.x(function(d) { return d[0] })
.y(function(d) { return d[1] })
.clipEdge(true)
//.useInteractiveGuideline(true)
;
chart.xAxis
.showMaxMin(false)
.tickFormat(function(d) { return d3.time.format('%x')(new Date(d)) });
chart.yAxis
.tickFormat(d3.format(',.2f'));
d3.select('#chart svg')
.datum(data)
.transition().duration(500).call(chart);
/* create a function to disable events and modify the update function */
function disableAreaClick() {
//I'm probably over-killing with the amount of events I'm cancelling out
//but it doesn't seem to have any side effects:
chart.stacked.dispatch.on("areaClick", null);
chart.stacked.dispatch.on("areaClick.toggle", null);
chart.stacked.scatter.dispatch.on("elementClick", null);
chart.stacked.scatter.dispatch.on("elementClick.area", null);
chart.legend.dispatch.on("legendClick", null);
chart.legend.dispatch.on("legendDblclick", null);
chart.legend.dispatch.on("stateChange", null);
if (chart.update) {
//if the chart currently has an update function
//(created when the chart is called on a container selection)
//then modify it to re-call this function after update
var originalUpdate = chart.update;
//assign the update function to a new name
chart.update = function(){
originalUpdate();
disableAreaClick();
}
}
}
//Call your function, disabling events on current chart and future updates:
disableAreaClick();
//this must be called *after* calling the chart on a selection
//so that it has an update function to modify
nv.utils.windowResize( chart.update );
return chart;
});
关于d3.js - NVD3 堆积面积图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917222/
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我试图用这种形式简单地获取数字 28 integer+space+integer+integer+space+integer我试过这个正则表达式 \\s\\d\\d\\s 但我得到了两个数字11 和
最近一直在学习D语言。我一直对运行时感到困惑。 从我能收集到的关于它的信息中,(这不是很多)我知道它是一种有助于 D 的一些特性的运行时。像垃圾收集一样,它与您自己的程序一起运行。但是既然 D 是编译
想问一下这两个正则表达式有区别吗? \d\d\d 与 \d{3} 我已经在我的本地机器上使用 Java 和 Windows 操作系统对此进行了测试,两者都工作正常并且结果相同。但是,当在 linux
我正在学习 Go,而且我坚持使用 Go 之旅(exercise-stringer.go:https://tour.golang.org/methods/7)。 这是一些代码: type IPAddr
我在Java正则表达式中发现了一段令我困惑的代码: Pattern.compile( "J.*\\d[0-35-9]-\\d\\d-\\d\\d" ); 要编译的字符串是: String string
我在 ruby 代码上偶然发现了这个。我知道\d{4})\/(\d\d)\/(\d\d)\/(.*)/是什么意思,但是\1-\2-\3-\4 是什么意思? 最佳答案 \1-\2-\3-\4 是 b
我一直在努力解决这个问题,这让我很恼火。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了自己的运行时,但是
我有两个列表列表,子列表代表路径。我想找到所有路径。 List> pathList1 List> pathList2 当然是天真的解决方案: List> result = new ArrayList>
我需要使用 Regex 格式化一个字符串,该字符串包含数字、字母 a-z 和 A-Z,同时还包含破折号和空格。 从用户输入我有02-219 8 53 24 输出应该是022 198 53 24 我正在
目标是达到与this C++ example相同的效果: 避免创建临时文件。我曾尝试将 C++ 示例翻译为 D,但没有成功。我也尝试过不同的方法。 import std.datetime : benc
tl;dr:你好吗perfect forwarding在 D? 该链接有一个很好的解释,但例如,假设我有这个方法: void foo(T)(in int a, out int b, ref int c
有什么方法可以在 D 中使用abstract auto 函数吗? 如果我声明一个类如下: class MyClass { abstract auto foo(); } 我收到以下错误: mai
有没有人为内存中重叠的数组切片实现交集?算法在没有重叠时返回 []。 当 pretty-print (使用重叠缩进)内存中重叠的数组切片时,我想要这个。 最佳答案 如果您确定它们是数组,那么只需取 p
我已经开始学习 D,但我在使用 Andrei Alexandrescu 所著的 The D Programming Language 一书中提供的示例时遇到了一些麻烦。由于 int 和 ulong 类
如何创建一个不可变的类? 我的目标是创建一个实例始终不可变的类。现在我只是用不可变的方法和构造函数创建了一个“可变”类。我将其称为 mData,m 表示可变。然后我创建一个别名 alias immut
不久前我买了《The D Programming Language》。好书,很有教育意义。但是,我在尝试编译书中列出的语言功能时遇到了麻烦:扩展函数。 在这本书中,Andrei 写了任何可以像这样调用
我在 D http://www.digitalmars.com/d/2.0/lazy-evaluation.html 中找到了函数参数的惰性求值示例 我想知道如何在 D 中实现可能的无限数据结构,就像
这个问题在这里已经有了答案: 12 年前关闭。 Possible Duplicate: Could anyone explain these undefined behaviors (i = i++
当前是否可以跨模块扫描/查询/迭代具有某些属性的所有函数(或类)? 例如: source/packageA/something.d: @sillyWalk(10) void doSomething()
我是一名优秀的程序员,十分优秀!