场景一:当你使用了html节点,里面有几个子元素,你想要鼠标放到每个子元素里都显示不同的tooltip内容
- 解决方案总结
- 通过dom事件监听鼠标在哪个元素
- 手动触发tooltip的显示
- 屏蔽原有的节点tooltip
- 代码
node:{
type:(d) => (d.c_nodes?'html':'rect'),
style:(d)=>{
cosnt{ name,c_nodes} = d
const subTemp = c_nodes.map(
item=> ` <div class='children' data-id="${item.name}"> // 设置data-id用在后面dom监听确定是那个节点。
{item.name}
</div>`
)
}
}
plugins:[
{
type:'tooltip',
key:'my-tooltip',
getContent:(evt,items)=>{
const { id,subid,nodeData} = evt.target
if(['html节点1','html节点2'].includes(id) && !subid) return '' ;
const data = ['html节点1','html节点2'].includes(id)? nodeData:items[0];
return `<div>${data.name}</div>`
},
style:{
'.tooltip':{
visibility:'hidden',
background:'#000',
color:'#fff'
}
}
}
]
await graph.render()
const tooltip = graph.getPluginInstance('my-tooltip')
const container = document.querySelector('#draw-map')
container.addEventListener('mouseOver',(e)=>{
const child = e.target.closest('.t-node .children')
if(child){
const childId = child.dataset.id
if(childId && tooltip){
const mockEvent ={
id:'html节点1',
type:'node',
client:{x:e.clientX,y:e.clientY}
subid:childId,
nodeData{
name:childId
}
}
tooltip.show(mockEvent);
}
}
})