<!DOCTYPE html> <html> <head> <title>d3.tip.js - Tooltips for D3</title> <meta charset="utf-8" /> <title>Bar Chart</title> <script type="text/javascript" src="../bower_components/d3/d3.js"></script> <script type="text/javascript" src="../index.js"></script> <style type="text/css"> body { padding: 40px; font-family: "Helvetica Neue", Helvetica, sans-serif; font-size: 12px; } .d3-tip { line-height: 1; font-weight: bold; padding: 12px; background: rgba(0, 0, 0, 0.8); color: #fff; border-radius: 2px; } .d3-tip text { fill: #fff; font-size: 12px; stroke: none; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } circle { fill: #ccc; fill-opacity: 0.6; stroke: #bbb; stroke-width: 1px; } circle:hover { fill: #bbb; stroke: #999; } circle.clickable:hover { cursor: pointer; } .rule { stroke-width: 1px; stroke: #c00; shape-rendering: crispedges; } </style> </head> <body> <script type="text/javascript"> var NODES = 5000 var RUNS = 3 var data = [], random = d3.random.normal(5), random2 = d3.random.irwinHall(1) for(var i = 0; i < NODES; i++) data.push(random(i)) var tip = d3.tip() .attr('class', 'd3-tip') .html(function(d) { return d.toFixed(2) }) .direction('nw') .offset([0, 3]) var w = 1000, h = 500, r = 10, linex, liney, x = d3.scale.linear().domain([0, data.length - 1]).range([r, w - r]), y = d3.scale.linear().domain([0, d3.max(data)]).range([h, 0]) var vis = d3.select(document.body) .append('svg') .attr('width', w) .attr('height', h) .append('g') .attr('transform', 'translate(20, 20)') .call(tip) // Create some artificial nesting gs = vis.append('g').append('g') circles = gs.selectAll('circle') .data(data) .enter().append('circle') circles.attr('r', function(d, i) { return random2(i) * 10 }) .attr('cx', function(d, i) { return x(i) }) .attr('cy', y) .on('mouseover', tip.show) .on('mouseout', tip.hide) var elements = circles[0], length = elements.length e = new MouseEvent('mouseover') for(var i = 0; i <= RUNS; i++) { var j = 0 console.time(i) for(j; j < length; j++) elements[i].dispatchEvent(e) console.timeEnd(i) } </script> </body> </html>