| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="http://d3js.org/d3.v3.min.js"></script> | |
| <style> | |
| body { margin:0; padding:0; } | |
| #map { width:960px; height:500px; background:cyan; } | |
| </style> | |
| </head> | |
| <body> | |
| <div id='map'></div> | |
| <script> | |
| function clickcancel() { | |
| var event = d3.dispatch('click', 'dblclick'); | |
| function cc(selection) { | |
| var down, | |
| tolerance = 5, | |
| last, | |
| wait = null; | |
| // euclidean distance | |
| function dist(a, b) { | |
| return Math.sqrt(Math.pow(a[0] - b[0], 2), Math.pow(a[1] - b[1], 2)); | |
| } | |
| selection.on('mousedown', function() { | |
| down = d3.mouse(document.body); | |
| last = +new Date(); | |
| }); | |
| selection.on('mouseup', function() { | |
| if (dist(down, d3.mouse(document.body)) > tolerance) { | |
| return; | |
| } else { | |
| if (wait) { | |
| window.clearTimeout(wait); | |
| wait = null; | |
| event.dblclick(d3.event); | |
| } else { | |
| wait = window.setTimeout((function(e) { | |
| return function() { | |
| event.click(e); | |
| wait = null; | |
| }; | |
| })(d3.event), 300); | |
| } | |
| } | |
| }); | |
| }; | |
| return d3.rebind(cc, event, 'on'); | |
| } | |
| var cc = clickcancel(); | |
| d3.select('#map').call(cc); | |
| cc.on('click', function() { | |
| d3.select('#map').text(d3.select('#map').text() + 'click, '); | |
| }); | |
| cc.on('dblclick', function() { | |
| d3.select('#map').text(d3.select('#map').text() + 'dblclick, '); | |
| }); | |
| </script> | |
| </body> | |
| </html> |
mercicle
commented
Jun 18, 2013
dmitrijbelikov
commented
Jan 16, 2014
Thanks a lot!
lazybios
commented
May 19, 2014
Nice !
wmayner
commented
Jan 14, 2015
Thanks, this is awesome. You might want to change +new Date() to new Date().getTime(), though; see http://jsperf.com/new-date-timing.
pkolanda
commented
Jul 16, 2015
selection.on("click", function(d, i) {
dispatch.custom.apply(this, arguments);
});
This way the argument can also be passed
turquoiseowl
commented
Jan 9, 2016
It looks like the last variable is redundant?
pkraker
commented
May 26, 2016
@pkolanda: At what line did you insert the snippet you posted? Thanks!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very nice!