带有html工具提示标签的d3 onerror默认图像

时间:2018-03-08 10:59:51

标签: javascript html image d3.js onerror

我正在为D3项目中的鼠标悬停事件制作带有图像和其他数据的工具提示。当我的数据图像丢失时,我想使用默认图像。我无法使用我写过的html字符串,如果有人可以为我看一下,我将不胜感激。我认为我的麻烦是用这个字符串的格式化。

这是相关的代码:

.on("mouseover", function(d) {
  d3.select(this)
    .transition()
    .duration(50)
  div.transition()
      .duration(200)
      .style("opacity", .9);

  div.html('<img src="images/'+ d.properties.objectNumber +'.jpg" onError="this.onerror=null;this.src="images/00037631.jpg" style ="width:4em;" /> &nbsp;' + d.properties.name)

    //div.html('<img src="images/'+ d.properties.objectNumber +'.jpg" onError="this.src="images/ANMS0533[020].jpg" style ="width:4em;" /> &nbsp;' + d.properties.name)
    .style("left", (d3.event.pageX) + "px")
  .style("top", (d3.event.pageY - 28) + "px");
})

我的图片在它存在的地方显示得很好,但是如果图像丢失,我会得到一个没有图像的图标,我希望看到一个默认图像,或者什么都没有。

我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:2)

我可能会像这样解决这个问题,在上传的img标签上使用idclass,然后使用d3选择它并将错误事件追加到它上面。

.on("mouseover", function(d) {
  d3.select(this)
    .transition()
    .duration(50)
  div.transition()
      .duration(200)
      .style("opacity", .9);

  div.html('<img id="loadingPic" src="images/'+ d.properties.objectNumber +'.jpg"/> &nbsp;' + d.properties.name)

d3.select("#loadingPic").on("error", function(){
  let el = d3.select(this);
  el.attr("src", "images/00037631.jpg").style("width", "4em");
  el.on("error", null);
})
    //div.html('<img src="images/'+ d.properties.objectNumber +'.jpg" onError="this.src="images/ANMS0533[020].jpg" style ="width:4em;" /> &nbsp;' + d.properties.name)
    .style("left", (d3.event.pageX) + "px")
  .style("top", (d3.event.pageY - 28) + "px");
})