2015-12-18 42 views
1

我使用Cytoscape Qtip extension在单击节点时显示qtips。防止隐藏用于细胞景观qtip

通常情况下,您可以在使用hide: false选项时防止隐藏qtips。当使用这个时,如果它有一个按钮,你仍然可以隐藏qtips。

但是,使用cytoscape时,这似乎不起作用。当点击其他地方时,隐藏事件将被触发。

cy.elements().qtip({ 
    content: function(event, api){ 
     api.set('content.button', true); 
     return 'Example qTip on ele ' + this.id(); 
    }, 
    position: { 
     my: 'top center', 
     at: 'bottom center' 
    }, 
    hide: false, 
    style: { 
     classes: 'qtip-bootstrap', 
     tip: { 
      width: 16, 
      height: 8 
     } 
    } 

    events: { 
       hide: function(event, api){ 
       console.log(event); 
       } 
    } 
}); 

我可以防止隐藏的事件从event.preventDefault()下通过,但是这也将隐藏的事件,这是一个有点乱停的关闭按钮。

任何想法,而它的行为是这样吗?

回答

0

我发现的最干净的解决方案是为隐藏事件提供垃圾事件。

使用null,false""似乎并不奏效。

hide: { 
    event: "asdf" //garbage event to allow hiding on close button click only 
}, 
1

这里的快速和肮脏的,使这项工作(上按钮关闭关闭)如果你需要它:

events:{ 
      hide: function(event, api){ 


        if(event.originalEvent.target.parentElement.parentElement.id != this[0].id){ 
         event.preventDefault(); 
        } 

    } 

说明:

  • 任何鼠标点击就会触发一个隐藏事件所有可见的qtips。
  • 看这个鼠标点击的目标(event.originalEvent.target.parentElement.parentElement.id),看它目前正在尝试关闭的qtip的关闭框。如果不是那么我们preventDefault()

这是潜在的非常床上的表现明智的,因为它在每次鼠标点击每个打开的qtip运行这些preventDefault()

1

请记住,因为这会将Qtip包装在非DOM元素上,所以必须绑定到Cytoscape图元。这些绑定在DOM之外,并且在Qtip的控制之外(例如,the hide case)。

您是否尝试将隐藏事件设置为空字符串""

+0

空字符串不起作用,但垃圾字符串('asdf'')。 :) – dwjohnston

+0

我认为这应该解决它https://github.com/cytoscape/cytoscape.js-qtip/issues/12 – maxkfranz