vis.js is a dynamic, browser-based visualization library
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.6 KiB

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>Timeline | Event listeners</title>
  5. <style type="text/css">
  6. body, html {
  7. font-family: sans-serif;
  8. }
  9. </style>
  10. <script src="../../../dist/vis.js"></script>
  11. <link href="../../../dist/vis-timeline-graph2d.min.css" rel="stylesheet" type="text/css" />
  12. </head>
  13. <body>
  14. <p>
  15. This example listens for events <code>select</code>, <code>click</code>, <code>doubleClick</code>, <code>rangechange</code>, and <code>rangechanged</code> of the Timeline (other possible events: <code>mouseDown</code>, <code>mouseUp</code>, <code>mouseOver</code>, <code>mouseMove</code>), and listens for changes in the DataSet (<code>add</code>, <code>update</code>, or <code>remove</code> items).
  16. </p>
  17. <div id="visualization"></div>
  18. <p></p>
  19. <div id="hoveredItem"></div>
  20. <div id="log"></div>
  21. <script type="text/javascript">
  22. var items = new vis.DataSet([
  23. {id: 1, content: 'item 1', start: '2013-04-20'},
  24. {id: 2, content: 'item 2', start: '2013-04-14'},
  25. {id: 3, content: 'item 3', start: '2013-04-18'},
  26. {id: 4, content: 'item 4', start: '2013-04-16', end: '2013-04-19'},
  27. {id: 5, content: 'item 5', start: '2013-04-25'},
  28. {id: 6, content: 'item 6', start: '2013-04-27'}
  29. ]);
  30. var container = document.getElementById('visualization');
  31. var options = {
  32. editable: true
  33. };
  34. var timeline = new vis.Timeline(container, items, options);
  35. timeline.on('rangechange', function (properties) {
  36. logEvent('rangechange', properties);
  37. });
  38. timeline.on('rangechanged', function (properties) {
  39. logEvent('rangechanged', properties);
  40. });
  41. timeline.on('select', function (properties) {
  42. logEvent('select', properties);
  43. });
  44. timeline.on('itemover', function (properties) {
  45. logEvent('itemover', properties);
  46. setHoveredItem(properties.item);
  47. });
  48. timeline.on('itemout', function (properties) {
  49. logEvent('itemout', properties);
  50. setHoveredItem('none');
  51. });
  52. timeline.on('click', function (properties) {
  53. logEvent('click', properties);
  54. });
  55. timeline.on('doubleClick', function (properties) {
  56. logEvent('doubleClick', properties);
  57. });
  58. timeline.on('contextmenu', function (properties) {
  59. logEvent('contextmenu', properties);
  60. });
  61. timeline.on('mouseDown', function (properties) {
  62. logEvent('mouseDown', properties);
  63. });
  64. timeline.on('mouseUp', function (properties) {
  65. logEvent('mouseUp', properties);
  66. });
  67. // other possible events:
  68. // timeline.on('mouseOver', function (properties) {
  69. // logEvent('mouseOver', properties);
  70. // });
  71. // timeline.on("mouseMove", function(properties) {
  72. // logEvent('mouseMove', properties);
  73. // });
  74. items.on('*', function (event, properties) {
  75. logEvent(event, properties);
  76. });
  77. function stringifyObject (object) {
  78. if (!object) return;
  79. var replacer = function(key, value) {
  80. if (value && value.tagName) {
  81. return "DOM Element";
  82. } else {
  83. return value;
  84. }
  85. }
  86. return JSON.stringify(object, replacer)
  87. }
  88. function logEvent(event, properties) {
  89. var log = document.getElementById('log');
  90. var msg = document.createElement('div');
  91. msg.innerHTML = 'event=' + JSON.stringify(event) + ', ' +
  92. 'properties=' + stringifyObject(properties);
  93. log.firstChild ? log.insertBefore(msg, log.firstChild) : log.appendChild(msg);
  94. }
  95. function setHoveredItem(id) {
  96. var hoveredItem = document.getElementById('hoveredItem');
  97. hoveredItem.innerHTML = 'hoveredItem=' + id;
  98. }
  99. </script>
  100. </body>
  101. </html>