我目前正在尝试使用Dygraphs(看起来非常非常棒!)但是由于一些奇怪的原因,注释功能对我来说不起作用,而且它也完全失败了在dsgraphs自己的画廊注释示例的jsFiddle版本上,所以这很可能是开发人员真正想要查看的错误/问题(!)。
重现(同样的事情发生在最新的Firefox和最新的Chrome中):
1。 查看Dygraphs库中的“注释”示例,此处: http://dygraphs.com/gallery/#g/annotations 它工作得很好,看起来很棒,像这样:
2。 按下“在jsFiddle中编辑”按钮,就那个页面上的那个例子而言。 您现在被发送到jsFiddle,如果您按下“运行”按钮,图表本身(彩色曲线等)显示得很好,但,只有注释“符号”的符号“显示,而注释的文本内容都显示为图表左侧的普通文本?!像这样:
看起来像某种CSS问题或类似于我,我是否正确?
由于这个例子是Dygraphs自己的例子,它也可以在他们自己的网站上运行,但不能在jsFiddle上工作,我猜想所有对数据或代码格式不正确的怀疑也可以放手。它也发生在我试图注释的我自己的计算机上的所有自己的Dygraphs图表中,但这个原生的Dygraphs图库示例是一个更好的例子来调查我猜?
所以,我的问题当然是,为什么会发生这种情况,如何修复它以使注释正常工作并正确显示?
此外:
让我们更简单,以便毫不犹豫地隔离问题。
这是一个非常简单的Dygraph注释示例,我将它放在我自己的本地磁盘上(即作为一个独立的HTML文件):
<html>
<head>
<script type="text/javascript" src="dygraph.js"></script>
<link rel="stylesheet" src="dygraph.css" />
</head>
<body>
<div id="test_chart" style="width:750px; height:350px;"></div>
<script type="text/javascript">
var test_annotations = [
{
series: "TestCol1",
x: "2017-05-26",
shortText: "A",
text: "Test annotation",
cssClass: 'annotation'
}
];
testchart = new Dygraph(
document.getElementById('test_chart'),
"Date,TestCol1\n" +
"2017-05-25,110\n" +
"2017-05-26,80\n" +
"2017-05-27,75\n",
{}
);
testchart.setAnnotations(test_annotations);
</script>
</body>
</html>
当我打开这个文件(在我的计算机上使用文件://在本地,在同一目录中有最新的dygraph.js和dygraph.css)时,这就是我得到的:
如您所见,此处出现的问题完全相同,即只有测试注释的“词干”在图表本身中可见,而注释文本(“A”)显示在左侧图表。
加载此文件后,Firebug控制台为空,并且Firebug网络选项卡中的任何位置都没有尝试(不成功或无法)加载任何图像。
同样,这对我来说感觉就像某种CSS定位问题,但我当然可能错了吗?
提供这个问题的答案是:
如何在尽可能少的简单更改/步骤中,使Dygraphs注释的本地示例PoC代码按预期工作,即在图形内正确位置的正方形内显示注释文本“A” (即在当前只显示“注释词干”的位置,就像在Dygraphs页面上的工作示例中所做的那样,在我的第一个screendump中)?
答案 0 :(得分:1)
设置 位置:绝对
为我解决了这个问题。
答案 1 :(得分:0)
图库示例从dygraphs.com加载图片。当您在jsfiddle上加载演示时,它会尝试从jsfiddle加载图像,但这并不起作用。 dygraphs注释工作正常,只是缺少图像文件。
答案 2 :(得分:0)
毕竟我似乎对CSS定位问题是正确的。
Dygraphs通过将以下HTML添加到页面的DOM来呈现注释(这是我在上面的问题测试中使用Firebug实时提取的本地示例代码中的测试注释的确切HTML):
<div style="font-size: 14px; left: 392.5px; top: 241.214px; width: 16px; height: 16px; color: rgb(0, 128, 128); border-color: rgb(0, 128, 128);" class="dygraph-annotation dygraphDefaultAnnotation dygraph-default-annotation annotation" title="Test annotation">A</div>
如果我(由this SO question建议)将CSS属性position: relative
添加到此div(手动,使用Firebug),图表突然显示如下:
请注意,注释文本现在已正确定位!它仍然缺少不透明的背景和彩色边框,但我想这只是由于某种原因缺少更多CSS属性的结果?
那么,让我们重点关注为什么我猜这些注释缺少CSS?
我最好的猜测是dygraph.css文件在某些条件下没有正确加载(显然在我的计算机上的jsFiddle和本地,即使它确实存在于与HTML文件和dygraph.js相同的目录中) )?或者我错了吗?
注释div的应用CSS的Firebug转储似乎支持这一点。这是来自Firebug的CSS,用于我本地示例的注释div(在jsFiddle中也是如此):
这里是Dygraphs网站上的工作实例中同样的CSS:
请参阅dygraph.css中的类在我的本地示例和jsFiddle示例中完全缺失(尽管确实在注释div的html代码的class
属性中明确引用,如上所示) ,即使CSS文件确实存在于与dygraph.js文件相同的目录中?!
@danvk,你知道为什么会发生这种情况吗?如果可以以某种方式修补Dygraphs以避免这种情况发生,从而加载它应该用于注释的所有CSS吗?
我目前唯一能找到的工作黑客解决方案是将dygraph.css的全部内容转储到HTML文件的<head>
中,如下所示:
<style>
/**
* Default styles for the dygraphs charting library.
*/
.dygraph-legend {
position: absolute;
font-size: 14px;
z-index: 10;
width: 250px; /* labelsDivWidth */
/*
dygraphs determines these based on the presence of chart labels.
It might make more sense to create a wrapper div around the chart proper.
top: 0px;
right: 2px;
*/
background: white;
line-height: normal;
text-align: left;
overflow: hidden;
}
...
/* For y2-axis label */
.dygraph-label-rotate-right {
text-align: center;
/* See http://caniuse.com/#feat=transforms2d */
transform: rotate(-90deg);
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
}
</style>
之后它终于正常工作了:
<强>增加:强>
似乎其他人(1)(2)在加载CSS文件方面存在这个普遍问题。虽然SO问题和Mozilla支持线程都没有被接受的答案,但事实上,所提出的答案都不适用于我。 WTF,这样一个巨大的问题怎么可能一般都是未知的/没有答案的?请注意,在Chrome和Firefox以及多台计算机上都会发生同样的事情,其中一些计算机之前从未打开过该文件,因此也不应该涉及任何与缓存相关的奇怪效果。无论哪种方式,看起来这个bug都不在Dygraphs的范围之内。
答案 3 :(得分:0)
我担心我迟到了,但看起来问题仍然有效(或者解决方法没有详细记录)。通过添加index.html,我能够更好地估计位置:
<style>
.dygraph-annotation {
position : relative;
display:inline-block;
}
</style>
添加到注释中的选项 attachAtBottom:true 可能会对此有所帮助,但仍有注释跳过悬停图(我猜这是因为传说占据了一些位置)
答案 4 :(得分:0)
整天试图解决与本文开头作者相同的问题。是的,更改CSN文件可以使您以某种方式解决问题,但是当我添加以下这一行时,一切都可以自己完成,而不会像铃鼓跳舞:
link rel = "stylesheet" href = "// cdnjs.cloudflare.com/ajax/libs/dygraph/2.1.0/dygraph.min.css" /
一如既往,您需要更加注意小事情