score:20

Accepted answer

the code below will handle one or more tooltips.

function opentip(ochart,datasetindex,pointindex){
   if(window.ochart.tooltip._active == undefined)
      window.ochart.tooltip._active = []
   var activeelements = window.ochart.tooltip._active;
   var requestedelem = window.ochart.getdatasetmeta(datasetindex).data[pointindex];
   for(var i = 0; i < activeelements.length; i++) {
       if(requestedelem._index == activeelements[i]._index)  
          return;
   }
   activeelements.push(requestedelem);
   //window.ochart.tooltip._view.body = window.ochart.getdatasetmeta(datasetindex).data;
   window.ochart.tooltip._active = activeelements;
   window.ochart.tooltip.update(true);
   window.ochart.draw();
}

function closetip(ochart,datasetindex,pointindex){
   var activeelements = window.ochart.tooltip._active;
   if(activeelements == undefined || activeelements.length == 0)
     return;
   var requestedelem = window.ochart.getdatasetmeta(datasetindex).data[pointindex];
   for(var i = 0; i < activeelements.length; i++) {
       if(requestedelem._index == activeelements[i]._index)  {
          activeelements.splice(i, 1);
          break;
       }
   }
   window.ochart.tooltip._active = activeelements;
   window.ochart.tooltip.update(true);
   window.ochart.draw();
}

complete solution provided by @beetlejuice - https://jsfiddle.net/ucvvvnm4/5/

score:21

i would be careful accessing/modifying private variables that begin with _. you may find yourself with unexpected behavior. why not trigger the canvas mousemove event

  function opentooltip (mychart, index) {

    var mousemoveevent, meta, point, rectangle, value;

    meta = mychart.getdatasetmeta(0);
    rectangle = mychart.canvas.getboundingclientrect();
    point = meta.data[index].getcenterpoint();

    mousemoveevent = new mouseevent('mousemove', {
      clientx: rectangle.left + point.x,
      clienty: rectangle.top + point.y
    });
    
    mychart.canvas.dispatchevent(mousemoveevent);

  },

to close the tooltip just trigger the mouseout event

  function closetooltip (mychart) {

    var mouseoutevent = new mouseevent('mouseout');
    return mychart.canvas.dispatchevent(mouseoutevent);

  }

Related Query

More Query from same tag