使用带有工具提示插件的多个标签 [英] using multiple labels with tooltip plugin

查看:115
本文介绍了使用带有工具提示插件的多个标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用jquery.flot制作家谱时间轴. 我要在悬停一个点(即悬停某个人的结婚点)时显示正确的标签,然后显示标签结婚-结婚日期". 但显然,我无法建立标签数组,因为有可能对数据进行处理.

I'm trying to make a genealogic timeline with jquery.flot. I want to display the right label when i'm hovering a point, i.e. when i'm hovering the marriage point of a person, the label "marriage - marriage date" appears. But visibly, i'm not able to build an array of labels as it's possible to do that for data.

只需一点代码:


<div id="placeholder" style="width:800px;height:300px"></div>

<script language="javascript" type="text/javascript">
$(function () {
  var data = [
    {
      label: [["Birth Pierre MARTIN (1756)"], ["Marriage Pierre MARTIN (1781)"], ["Death Pierre MARTIN (1812)"]],
      data: [[1756, 20.0], [1781, 20.0], [1812, 20.0]]
    },
    {
      label: [["Birth Marie DUPONT (1761)"], ["Marriage Marie DUPONT (1781)"], ["Death Marie DUPONT (1833)"]],
      data: [[1761, 19.0], [1781, 19.0], [1833, 19.0]]
    },
    {
      label: [["Birth Charles MARTIN (1782)"], ["Marriage Charles MARTIN (1810)"], ["Death Charles MARTIN (1855)"]],
      data: [[1782, 18.0], [1810, 18.0], [1855, 18.0]]
    },
    {
      label: [["Birth Catherine MARTIN (1790)"], ["Marriage Catherine MARTIN (1810)"], ["Death Catherine MARTIN (1868)"]],
      data: [[1790, 17.0], [1810, 17.0], [1868, 17.0]]
    },
    {
      label: [["Birth Louis MARTIN (1813)"], ["Death Louis MARTIN (1876)"]],
      data: [[1813, 16.0], [1876, 16.0]]
    }
    ];
  var options = {
    series: {
      lines: { show: true, lineWidth: 5},
      points: { show: true, radius: 4 }
    },
    legend: { show: false },
    xaxis: { min:1745, max:1885, tickDecimals: 0, ticks: [[1750, "1750"], [1760, "1760"], [1770, "1770"], [1780, "1780"], [1790, "1790"], [1800, "1800"], [1810, "1810"], [1820, "1820"], [1830, "1830"], [1840, "1840"], [1850, "1850"], [1860, "1860"], [1870, "1870"], [1880, "1880"]] },
    yaxis: { show: true, color:null, min:14, max:22, ticks: [[20, "Pierre MARTIN (1756-1812)"], [19, "Marie DUPONT (1761-1833)"], [18, "Charles MARTIN (1782-1855)"], [17, "Catherine MARTIN (1790-1868)"], [16, "Louis MARTIN (1813-1876)"]]  },
    selection: { mode: "x" },
    grid: { borderWidth: 2, clickable: true, hoverable: true, autoHighlight: true
  }};
  var placeholder = $("#placeholder");
  placeholder.bind("plotselected", function (event, ranges) {
  $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1));
  var zoom = $("#zoom").attr("checked");
  if (zoom)
    plot = $.plot(placeholder, data,
    $.extend(true, {}, options, {
      xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
      }));
    });

  placeholder.bind("plotunselected", function (event) {
    $("#selection").text("");
  });

  var plot = $.plot(placeholder, data, options);
  $("#clearSelection").click(function () {
    plot.clearSelection();
  });

  function showTooltip(x, y, contents) {
    $('' + contents + '').css( {
      position: 'absolute',
      display: 'none',
      top: y + 5,
      left: x + 5,
      border: '1px solid #fdd',
      padding: '2px',
      'background-color': '#eef',
      opacity: 0.80
    }).appendTo("body").fadeIn(20);
  }

  var previousPoint = null;
    $("#placeholder").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                 $("#tooltip").remove();
                var x = item.datapoint[0].toFixed(2),
                    y = item.datapoint[1].toFixed(2);
                 showTooltip(item.pageX, item.pageY,
                            item.series.label);
            }
        }
        else {
            $("#tooltip").remove();
            previousPoint = null;
        }
    });

});
</script>

当我将鼠标悬停在图形的结婚点上时,而不是显示:

When I hover on the marriage point of the graph, instead of displaying :

"皮埃尔·马丁(Pierre MARTIN)婚姻(1781)",

我得到了整个数组:

"出生Pierre MARTIN(1756)结婚Pierre MARTIN(1781)死亡Pierre MARTIN(1812)".

您可以在这里看到我的示例,以进行更多说明(您可以获取代码):

You can see my example here, to be more explainful (you can grab the code):

我的时间线图演示

有没有一种方法可以在图形上每个点使用一个标签?

Is there a way to use one label per point on the graph ?

推荐答案

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Essai Flot tooltip</title>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="flot/excanvas.min.js"></script><![endif]-->
<script type="text/javascript" src="js/jquery-1.5.2.min.js"></script>
<script src="flot/jquery.flot.min.js" type="text/javascript" language="javascript"></script>
</head>
<body>
    <h1>Essai Flot tooltip</h1>

    <div id="placeholder" style="width:800px;height:300px"></div>

<script id="source" language="javascript" type="text/javascript">
$(function () {
    var data = [
        {
            label: [["Birth Pierre MARTIN (1756)"], ["Marriage Pierre MARTIN (1781)"], ["Death Pierre MARTIN (1812)"]],
            data: [[1756, 20.0], [1781, 20.0], [1812, 20.0]]
        },
        {
            label: [["Birth Marie DUPONT (1761)"], ["Marriage Marie DUPONT (1781)"], ["Death Marie DUPONT (1833)"]],
            data: [[1761, 19.0], [1781, 19.0], [1833, 19.0]]
        },
        {
            label: [["Birth Charles MARTIN (1782)"], ["Marriage Charles MARTIN (1810)"], ["Death Charles MARTIN (1855)"]],
            data: [[1782, 18.0], [1810, 18.0], [1855, 18.0]]
        },
        {
            label: [["Birth Catherine MARTIN (1790)"], ["Marriage Catherine MARTIN (1810)"], ["Death Catherine MARTIN (1868)"]],
            data: [[1790, 17.0], [1810, 17.0], [1868, 17.0]]
        },
        {
            label: [["Birth Louis MARTIN (1813)"], ["Death Louis MARTIN (1876)"]],
            label: "Louis MARTIN (1813-1876)",
            data: [[1813, 16.0], [1876, 16.0]]
        }
    ];
    var options = {
        series: {
        lines: { show: true, lineWidth: 5},
        points: { show: true, radius: 4 }
    },
        legend: { show: false },
        xaxis: { min:1745, max:1885, tickDecimals: 0, ticks: [[1750, "1750"], [1760, "1760"], [1770, "1770"], [1780, "1780"], [1790, "1790"], [1800, "1800"], [1810, "1810"], [1820, "1820"], [1830, "1830"], [1840, "1840"], [1850, "1850"], [1860, "1860"], [1870, "1870"], [1880, "1880"]] },
        yaxis: { show: true, color:null, min:14, max:22, ticks: [[20, "<strong>Pierre MARTIN</strong> (1756-1812)"], [19, "<strong>Marie DUPONT</strong> (1761-1833)"], [18, "<strong>Charles MARTIN</strong> (1782-1855)"], [17, "<strong>Catherine MARTIN</strong> (1790-1868)"], [16, "<strong>Louis MARTIN</strong> (1813-1876)"]]  },
        selection: { mode: "x" },
        grid: { borderWidth: 2, clickable: true, hoverable: true, autoHighlight: true
        }
    };
    var placeholder = $("#placeholder");
    placeholder.bind("plotselected", function (event, ranges) {
        $("#selection").text(ranges.xaxis.from.toFixed(1) + " to " + ranges.xaxis.to.toFixed(1));
        var zoom = $("#zoom").attr("checked");
        if (zoom)
            plot = $.plot(placeholder, data,
            $.extend(true, {}, options, {
                xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }
        }));
    });

    placeholder.bind("plotunselected", function (event) {
        $("#selection").text("");
    });

    var plot = $.plot(placeholder, data, options);
    $("#clearSelection").click(function () {
        plot.clearSelection();
    });

    function showTooltip(x, y, contents) {
        $('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#eef',
            opacity: 0.80
        }).appendTo("body").fadeIn(20);
    }

    var previousPoint = null;
    $("#placeholder").bind("plothover", function (event, pos, item) {
        $("#x").text(pos.x.toFixed(2));
        $("#y").text(pos.y.toFixed(2));
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                 $("#tooltip").remove();
                 console.log(item);
                var x = item.datapoint[0].toFixed(2),
                    y = item.datapoint[1].toFixed(2);
                 showTooltip(item.pageX, item.pageY,
                            item.series.label[item.dataIndex]);
            }
        }
        else {
            $("#tooltip").remove();
            previousPoint = null;
        }
    });

});
</script>
</body>
</html>

请注意,我已对此进行了更改:

Notice that I changed this:

showTooltip(item.pageX, item.pageY,
                            item.series.label);

为此:

showTooltip(item.pageX, item.pageY,
                                item.series.label[item.dataIndex]);

这篇关于使用带有工具提示插件的多个标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆