Plotly.js 将鼠标悬停在图表标题上时显示工具提示
Plotly.js display tooltip on hover over graph title
Plotly.js 允许您指定图表标题,但似乎没有选项可以指定将鼠标悬停在标题上时显示更长的描述。
因此,我向包含标题文本的 text
元素添加了一个 title
属性,然后在页面上激活了 JQueryUI 工具提示。但是当我将鼠标悬停在标题上时,似乎什么也没有发生。以下是我添加 title
属性并激活工具提示的方式:
$('div#myDiv g.g-gtitle > text.gtitle')[0].title = 'This is a long description that should show on hover over the title';
$( document ).tooltip();
我也试过以下方法,也没有用:
$('div#myDiv g.g-gtitle > text.gtitle').attr('title', 'This is a long description that should show on hover over the title');
$( document ).tooltip();
完整的示例代码在这里:https://codepen.io/synaptik/pen/eKBYbE
知道如何在将鼠标悬停在图表标题上时显示工具提示吗?
我检查了你的代码,Jquery-ui-tooltip
在与 plotly 一起工作时导致了一些问题,我不想详细说明,但基本上,在悬停时,一个新元素被添加到以前的悬停元素.
这是我针对您问题的解决方案版本,plotly 已将所有图形元素设置为 pointer-events:none
,这些元素上不会发生任何事件,因此我使用 CSS pointer-events: all
,我们还需要将图表包裹在包含工具提示内容的 div
和 span
中,因此使用 javascript 事件 mouseover
和 mouseout
, 我们可以 hide/show 工具提示。
请仔细阅读下面的代码,如果有任何疑问,请告诉我,如果您的问题已解决,请告诉我,谢谢!
var data_x = ['2018-05-01', '2018-05-02', '2018-05-03', '2018-05-04', '2018-05-05', '2018-05-06', '2018-05-07', '2018-05-08', '2018-05-09'];
// data
var Data = {
type: 'scatter',
x: data_x,
y: [4, 2, -1, 4, -5, -7, 0, 3, 8],
mode: 'lines+markers',
name: 'Data',
showlegend: true,
hoverinfo: 'all',
line: {
color: 'blue',
width: 2
},
marker: {
color: 'blue',
size: 8,
symbol: 'circle'
}
}
// layout
var layout = {
title: 'My Title',
xaxis: {
zeroline: false
},
yaxis: {
range: [data_x[0], data_x[data_x.length - 1]],
zeroline: false
}
}
Plotly.plot('myDiv', [Data], layout);
$('#myDiv text.gtitle').on('mouseover', function(e) {
var hovertext = $('span.custom-tooltip');
var pos = e.target.getBoundingClientRect();
hovertext.css("left", (pos.left - (hovertext.width() / 2) + (pos.width / 2)) + "px");
hovertext.css("top", pos.top * 1.5 + "px");
hovertext.css("visibility", "visible");
})
$('#myDiv text.gtitle').on('mouseout', function(e) {
var hovertext = $('span.custom-tooltip');
hovertext.css("visibility", "hidden");
})
.wrapper {
position: relative;
}
.wrapper .custom-tooltip {
visibility: hidden;
display: inline;
width: fit-content;
position: absolute;
left: 0px;
right: 0px;
}
#myDiv text.gtitle {
pointer-events: all !important;
}
.wrapper .custom-tooltip.show {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<!-- Plotly chart will be drawn inside this DIV -->
<div class="wrapper">
<div id="myDiv"></div>
<span class="custom-tooltip">This is a really long title</span>
</div>
<script>
/* JAVASCRIPT CODE GOES HERE */
</script>
我没有使用 JQuery 工具提示,而是使用了 Tippy。但是,我仍然不得不像这样修改 Plotly 图表(感谢@Naren-Murali):
$('div#myDiv g.g-gtitle > text.gtitle').addClass('graphWrapperPointerEvents');
与 CSS:
.graphWrapperPointerEvents {
pointer-events: all !important;
}
Plotly.js 允许您指定图表标题,但似乎没有选项可以指定将鼠标悬停在标题上时显示更长的描述。
因此,我向包含标题文本的 text
元素添加了一个 title
属性,然后在页面上激活了 JQueryUI 工具提示。但是当我将鼠标悬停在标题上时,似乎什么也没有发生。以下是我添加 title
属性并激活工具提示的方式:
$('div#myDiv g.g-gtitle > text.gtitle')[0].title = 'This is a long description that should show on hover over the title';
$( document ).tooltip();
我也试过以下方法,也没有用:
$('div#myDiv g.g-gtitle > text.gtitle').attr('title', 'This is a long description that should show on hover over the title');
$( document ).tooltip();
完整的示例代码在这里:https://codepen.io/synaptik/pen/eKBYbE
知道如何在将鼠标悬停在图表标题上时显示工具提示吗?
我检查了你的代码,Jquery-ui-tooltip
在与 plotly 一起工作时导致了一些问题,我不想详细说明,但基本上,在悬停时,一个新元素被添加到以前的悬停元素.
这是我针对您问题的解决方案版本,plotly 已将所有图形元素设置为 pointer-events:none
,这些元素上不会发生任何事件,因此我使用 CSS pointer-events: all
,我们还需要将图表包裹在包含工具提示内容的 div
和 span
中,因此使用 javascript 事件 mouseover
和 mouseout
, 我们可以 hide/show 工具提示。
请仔细阅读下面的代码,如果有任何疑问,请告诉我,如果您的问题已解决,请告诉我,谢谢!
var data_x = ['2018-05-01', '2018-05-02', '2018-05-03', '2018-05-04', '2018-05-05', '2018-05-06', '2018-05-07', '2018-05-08', '2018-05-09'];
// data
var Data = {
type: 'scatter',
x: data_x,
y: [4, 2, -1, 4, -5, -7, 0, 3, 8],
mode: 'lines+markers',
name: 'Data',
showlegend: true,
hoverinfo: 'all',
line: {
color: 'blue',
width: 2
},
marker: {
color: 'blue',
size: 8,
symbol: 'circle'
}
}
// layout
var layout = {
title: 'My Title',
xaxis: {
zeroline: false
},
yaxis: {
range: [data_x[0], data_x[data_x.length - 1]],
zeroline: false
}
}
Plotly.plot('myDiv', [Data], layout);
$('#myDiv text.gtitle').on('mouseover', function(e) {
var hovertext = $('span.custom-tooltip');
var pos = e.target.getBoundingClientRect();
hovertext.css("left", (pos.left - (hovertext.width() / 2) + (pos.width / 2)) + "px");
hovertext.css("top", pos.top * 1.5 + "px");
hovertext.css("visibility", "visible");
})
$('#myDiv text.gtitle').on('mouseout', function(e) {
var hovertext = $('span.custom-tooltip');
hovertext.css("visibility", "hidden");
})
.wrapper {
position: relative;
}
.wrapper .custom-tooltip {
visibility: hidden;
display: inline;
width: fit-content;
position: absolute;
left: 0px;
right: 0px;
}
#myDiv text.gtitle {
pointer-events: all !important;
}
.wrapper .custom-tooltip.show {
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<!-- Plotly chart will be drawn inside this DIV -->
<div class="wrapper">
<div id="myDiv"></div>
<span class="custom-tooltip">This is a really long title</span>
</div>
<script>
/* JAVASCRIPT CODE GOES HERE */
</script>
我没有使用 JQuery 工具提示,而是使用了 Tippy。但是,我仍然不得不像这样修改 Plotly 图表(感谢@Naren-Murali):
$('div#myDiv g.g-gtitle > text.gtitle').addClass('graphWrapperPointerEvents');
与 CSS:
.graphWrapperPointerEvents {
pointer-events: all !important;
}