public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_1_layout, container, false);
return v;}
series.slices.template.events.on("over", function(ev) {
series.slices.template.tooltipHTML=showHtml(ev, series.name);
}, this);
中的工具提示问题:无法在饼图切片上重新加载。
我正在使用自定义工具提示,例如在鼠标悬停时生成自定义html。一切正常,但是当我将光标从一个切片移动到另一个切片时,弹出html不会刷新。当我将鼠标移出然后再次将鼠标悬停在同一切片上时,弹出html显示正确的数据。
我认为以前的html数据缓存在某个地方。请帮助我。
答案 0 :(得分:1)
查看showHtml
在做什么可能会有所帮助。但是,如果没有这些,我们将尽一切努力。
此代码存在一些问题。
从代码角度来看,最明显的是这一行:
series.slices.template.tooltipHTML=showHtml(ev, series.name);
您要重置模板的tooltipHTML而不是实际切片的tooltipHTML。默认情况下,模板的applyOnClones
为true
,因此它将传播到所有其他切片,因此如果可行,事故。如果showHtml
中有任何不依赖于data placeholders的特定于切片的设置,这将使TooltipHTML停留在下一个经过切片的切片上。
但是,真正的问题是方法。
只要设置了tooltipHTML
或tooltipText
,悬停时就会出现工具提示 。
在这种情况下,最好为tooltipHTML
使用adapter。
作为一项快速测试,以了解哪个在竞争条件中获胜,悬停事件或tooltipText / HTML适配器,分别为每个处理程序创建一个处理程序,然后将鼠标悬停在一个切片上:
series.slices.template.events.on("over", function(){
console.log("hover");
});
// override tooltipText so tooltipHTML is actually used
series.slices.template.tooltipHTML = "something...";
series.slices.template.adapter.add("tooltipHTML", function(tooltipHTML) {
console.log("adapter");
return tooltipHTML;
});
// console:
// "adapter"
// "hover"
您会发现适配器首先触发,因此,当您将鼠标悬停时,工具提示及其HTML及其所有内容已经在使用中。
因此,使用适配器,只需确保调整您的showHtml
函数,使其第一个参数本身就使用target
而不是event
(可能不需要使用另一个参数tooltipHTML
被修改,因为它将始终被发送原始的tooltipHTML
未经格式化的字符串,因此可以手动将其称为字符串还是变量)。
适配器看起来像这样:
var originalTooltipHTML = "<strong>{country}: </strong>"
series.slices.template.tooltipHTML = originalTooltipHTML;
series.slices.template.adapter.add("tooltipHTML", function(tooltipHTML, target) {
// #2: If we had used an event, here you would work on the target itself, event.target, not the template.
// The showHtml might not even be needed, perhaps whatever it does can go in here instead.
return showHtml(target);
});
这是一个演示,其中包含所有内容:
https://codepen.io/team/amcharts/pen/a0122e572d27cf513a78384345cad3a6