「ヒント」が有効になっている強制有向グラフがあります。非表示のノード、つまり「アルファ」がゼロのノードのヒントを表示したくありません。onShow コールバック関数では、tips.hide() を使用しようとしていますが、ヒントを隠していません。これが私のコードです。
Tips: {
enable: true,
type: 'Native',
onShow: function(tip, node) {
if( node.getData('alpha') == 0 ) this.fd.tips.hide(false);
else tip.innerHTML = node.name;
}
}
infovis ライブラリ jit.js を掘り下げると、バグのようなものが見つかりました。以下は、基本的に style.display を「none」に設定する hide 関数です。
hide: function(triggerCallback) {
this.tip.style.display = 'none';
triggerCallback && this.config.onHide();
}
以下のコードを見てください。
onMouseMove: function(e, win, opt) {
if(this.dom && this.isLabel(e, win)) {
this.setTooltipPosition($.event.getPos(e, win));
}
if(!this.dom) {
var node = opt.getNode();
if(!node) {
this.hide(true);
return;
}
if(this.config.force || !this.node || this.node.id != node.id) {
this.node = node;
this.config.onShow(this.tip, node, opt.getContains());
}
this.setTooltipPosition($.event.getPos(e, win));
}
},
setTooltipPosition: function(pos) {
var tip = this.tip,
style = tip.style,
cont = this.config;
style.display = ''; //This looks like a problem
//get window dimensions
var win = {
'height': document.body.clientHeight,
'width': document.body.clientWidth
};
//get tooltip dimensions
var obj = {
'width': tip.offsetWidth,
'height': tip.offsetHeight
};
//set tooltip position
var x = cont.offsetX, y = cont.offsetY;
style.top = ((pos.y + y + obj.height > win.height)?
(pos.y - obj.height - y) : pos.y + y) + 'px';
style.left = ((pos.x + obj.width + x > win.width)?
(pos.x - obj.width - x) : pos.x + x) + 'px';
}
ご覧のとおり、onShow 関数は onMouseMove 関数から呼び出されます。onShow の後、setTooltipPosition 関数が呼び出され、style.display が ' ' に戻されます (コード内の私のコメントを参照)。このため、 onShow 関数から hide() を呼び出した後でも、ヒントは非表示になりません。setTooltipPosition でその行をコメントアウトすると、機能しました。つまり、非表示のノードのツール ヒントが非表示になりました。
これは infovis のバグですか、それとも何か間違ったことをしていますか? バグでない場合、非表示機能の使用方法を知りたいです。
また、ツール ヒントを非表示にする他の良い方法を知っている人はいますか?