注释不起作用,甚至在Dygraphs自己的jsFiddle示例中,为什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注释不起作用,甚至在Dygraphs自己的jsFiddle示例中,为什么?相关的知识,希望对你有一定的参考价值。

我现在正在尝试Dygraphs(这看起来真的很棒!)但是由于一些奇怪的原因,注释功能对我来说不起作用,并且它也在dsgraphs自己的画廊的jsFiddle版本中以完全相同的方式失败注释的例子,所以这很可能是开发人员真正想要查看的错误/问题(!)。

重现(同样的事情发生在最新的Firefox和最新的Chrome):

1.看看Dygraphs画廊中的“注释”示例,这里:http://dygraphs.com/gallery/#g/annotations它工作得很好,看起来很棒,像这样:

Working annotations on Dygraphs gallery page

2.按下“在jsFiddle中编辑”按钮,在该页面上显示该示例。您现在被发送到jsFiddle,如果您按下“运行”按钮,图表本身(彩色曲线等)显示得很好,但是,只显示注释“符号”的“词干”,而文本注释的内容都显示为图表左侧的普通文本?!像这样:

Broken annotations on 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
" +
    "2017-05-25,110
" +
    "2017-05-26,80
" +
    "2017-05-27,75
",
    {}
  );
  testchart.setAnnotations(test_annotations);
</script>
</body>
</html>

当我打开这个文件(在我的计算机上的Chrome文件://本地,在同一目录中有最新的dygraph.js和dygraph.css)时,这就是我得到的:

Local example

如您所见,此处出现的问题完全相同,即只有测试注释的“主干”在图形本身中可见,而注释文本(“A”)显示在图形的左侧。

加载此文件后,Firebug控制台为空,并且Firebug网络选项卡中的任何位置都不会尝试(不成功或以其他方式)加载任何图像。

再次,这对我来说感觉就像某种CSS定位问题,但我当然可能错了?

提供这个问题的答案是:

如何在尽可能少的简单更改/步骤中,使Dygraphs注释的本地示例PoC代码按预期工作,即在图形内正确位置的正方形内显示注释文本“A”(即, “注释词干”当前刚刚显示的位置,就像在Dygraphs页面上的工作示例中所做的那样,在此问题的上面第一个screendump中)?

答案

设定位置:绝对

为我解决了这个问题。

另一答案

该库示例从dygraphs.com加载图像。当您在jsfiddle上加载演示时,它会尝试从jsfiddle加载图像,这不起作用。 dygraphs注释工作正常,只是图像文件丢失了。

另一答案

毕竟我似乎对CSS定位问题是正确的。

Dygraphs通过将以下HTML添加到页面的DOM中来呈现注释(这是我在上面的问题测试中的本地示例代码中的测试注释的确切HTML,使用Firebug实时提取):

<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),图形突然显示如下:

Correct positioning

请注意,注释文本现在已正确定位!它仍然缺少它的不透明背景和彩色边框,但我想这只是因为某些原因缺少更多CSS属性的结果?

那么,让我们重点关注为什么我猜这些注释缺少CSS?

我最好的猜测是dygraph.css文件在某些​​条件下没有正确加载(显然在jsFiddle和我的计算机本地,即使它确实存在于与HTML文件和dygraph.js相同的目录中)?还是我错了?

应用CSS的注释div的Firebug转储似乎支持这一点。这是来自Firebug的CSS,用于我本地示例的注释div(在jsFiddle中也是如此):

Non-working CSS

这里是Dygraphs网站上图库中工作实例中相同内容的CSS:

Working 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>

之后,它终于正常工作:

enter image description here

加成:

似乎其他人(1)(2)在加载CSS文件方面存在这个普遍问题。虽然SO问题和Mozilla支持线程都没有被接受的答案,但事实上,所提出的答案都不适用于我。 WTF,这样一个巨大的问题怎么可能一般都是未知的/没有答案的?请注意,在Chrome和Firefox以及多台计算机上都会发生同样的事情,其中​​一些计算机之前从未打开过该文件,因此也不应该涉及任何与缓存相关的奇怪效果。无论哪种方式,看起来这个bug都不在Dygraphs的范围之内。

另一答案

我担心我迟到了,但看起来问题仍然有效(或者解决方法没有详细记录)。通过在index.html中添加,我能够更好地估计位置:

<style>
    .dygraph-annotation {
        position : relative;
        display:inline-block;
    }
</style>

然而,仍然注释不符合图表:enter image description here

添加到注释中的选项attachAtBottom:true可能对此有所帮助,但仍有注释跳过悬停图(我猜这是因为传说占据了一些位置)

以上是关于注释不起作用,甚至在Dygraphs自己的jsFiddle示例中,为什么?的主要内容,如果未能解决你的问题,请参考以下文章

图表插件dygraphs.js插件使用

为啥 /**/ 注释在样式表中起作用,而 // 注释却不起作用?

弹簧注释不起作用

事务注释在 Spring Boot 中不起作用

事务注释在 Spring Boot 2.1.3 中不起作用

@JsonSerialize 和 @JsonDeserialize 在包含在注释中时不起作用