2

「ヒント」が有効になっている強制有向グラフがあります。非表示のノード、つまり「アルファ」がゼロのノードのヒントを表示したくありません。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 のバグですか、それとも何か間違ったことをしていますか? バグでない場合、非表示機能の使用方法を知りたいです。

また、ツール ヒントを非表示にする他の良い方法を知っている人はいますか?

4

1 に答える 1