cytoscape.js-qtip:show.delay 不工作
cytoscape.js-qtip: show.delay not working
我在节点上使用 cytoscape.js-qtip 进行鼠标悬停,但我想指定 show.delay 选项。它似乎没有用——工具提示仍然会立即出现。为了在尽可能简单的情况下对此进行测试,我尝试修改 cytoscape.js-qtip 附带的标准 demo.html,以便工具提示 1) 仅在节点上,2) 触发通过添加显示和隐藏选项,在鼠标悬停时而不是点击时,以及 3) 具有 3 秒的延迟选项。我让其他一切保持不变。工具提示仍然会立即出现。当我使用 api 检查 show.delay 的值时,它被设置为 3000,正如预期的那样。这个功能是不是不能用这个包装器工作,还是我做错了什么?这是演示代码的更改部分:
cy.nodes().qtip({
content: function(){ return 'Example qTip on ele ' + this.id() },
position: {
my: 'top center',
at: 'bottom center'
},
show: { event: 'mouseover',
delay: 3000
},
hide: { event: 'mouseout'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 16,
height: 8
}
}
});
我认为这不会开箱即用,因为扩展必须绕过 Qtip 事件系统并绕过它才能在(非 HTMLDomElement)图形元素上工作。
Github 问题:https://github.com/cytoscape/cytoscape.js-qtip/issues/6
在通过电子邮件与 Max 讨论后,他建议我生成自己的自定义事件,并在这方面给了我一些帮助。以下工作生成一个 qtip,需要节点和边缘都悬停 1s:
var hoverTimeout;
var hoverDelay = 1000; // 1sec
var hoverElt = cy.collection(); // empty set so no null checks needed
cy.on('mouseover', 'node', function(evt){
hoverElt = this;
clearTimeout( hoverTimeout );
hoverTimeout = setTimeout(function(){hoverElt.trigger('hover');},
hoverDelay);
})
.on('mouseover', 'edge', function(evt){
hoverElt = this;
var container = cy.container();
// Edges don't have their own position, so in order for an edge qtip
// to come up near the edge (actually, near the mouse event), we have
// to adjust its position manually.
var api = hoverElt.qtip('api');
api.set('position.adjust.x',
evt.cyRenderedPosition.x + container.offsetLeft);
api.set('position.adjust.y',
evt.cyRenderedPosition.y + container.offsetTop);
clearTimeout( hoverTimeout );
hoverTimeout = setTimeout(function(){hoverElt.trigger('hover');},
hoverDelay);
})
.on('mouseout', 'node,edge', function(){
clearTimeout( hoverTimeout );
hoverElt.trigger('hovercancel');
});
cy.elements().qtip({
content: 'This is a tooltip',
show: { event: 'hover'},
hide: { event: 'hovercancel' },
});
我在节点上使用 cytoscape.js-qtip 进行鼠标悬停,但我想指定 show.delay 选项。它似乎没有用——工具提示仍然会立即出现。为了在尽可能简单的情况下对此进行测试,我尝试修改 cytoscape.js-qtip 附带的标准 demo.html,以便工具提示 1) 仅在节点上,2) 触发通过添加显示和隐藏选项,在鼠标悬停时而不是点击时,以及 3) 具有 3 秒的延迟选项。我让其他一切保持不变。工具提示仍然会立即出现。当我使用 api 检查 show.delay 的值时,它被设置为 3000,正如预期的那样。这个功能是不是不能用这个包装器工作,还是我做错了什么?这是演示代码的更改部分:
cy.nodes().qtip({
content: function(){ return 'Example qTip on ele ' + this.id() },
position: {
my: 'top center',
at: 'bottom center'
},
show: { event: 'mouseover',
delay: 3000
},
hide: { event: 'mouseout'
},
style: {
classes: 'qtip-bootstrap',
tip: {
width: 16,
height: 8
}
}
});
我认为这不会开箱即用,因为扩展必须绕过 Qtip 事件系统并绕过它才能在(非 HTMLDomElement)图形元素上工作。
Github 问题:https://github.com/cytoscape/cytoscape.js-qtip/issues/6
在通过电子邮件与 Max 讨论后,他建议我生成自己的自定义事件,并在这方面给了我一些帮助。以下工作生成一个 qtip,需要节点和边缘都悬停 1s:
var hoverTimeout;
var hoverDelay = 1000; // 1sec
var hoverElt = cy.collection(); // empty set so no null checks needed
cy.on('mouseover', 'node', function(evt){
hoverElt = this;
clearTimeout( hoverTimeout );
hoverTimeout = setTimeout(function(){hoverElt.trigger('hover');},
hoverDelay);
})
.on('mouseover', 'edge', function(evt){
hoverElt = this;
var container = cy.container();
// Edges don't have their own position, so in order for an edge qtip
// to come up near the edge (actually, near the mouse event), we have
// to adjust its position manually.
var api = hoverElt.qtip('api');
api.set('position.adjust.x',
evt.cyRenderedPosition.x + container.offsetLeft);
api.set('position.adjust.y',
evt.cyRenderedPosition.y + container.offsetTop);
clearTimeout( hoverTimeout );
hoverTimeout = setTimeout(function(){hoverElt.trigger('hover');},
hoverDelay);
})
.on('mouseout', 'node,edge', function(){
clearTimeout( hoverTimeout );
hoverElt.trigger('hovercancel');
});
cy.elements().qtip({
content: 'This is a tooltip',
show: { event: 'hover'},
hide: { event: 'hovercancel' },
});