diff --git a/d3.behavior.js b/d3.behavior.js index 8c67949a..e2e0c66f 100644 --- a/d3.behavior.js +++ b/d3.behavior.js @@ -17,7 +17,8 @@ d3.behavior.zoom = function() { .on("mousemove.zoom", d3_behavior_zoomMousemove) .on("mouseup.zoom", d3_behavior_zoomMouseup) .on("touchmove.zoom", d3_behavior_zoomTouchmove) - .on("touchend.zoom", d3_behavior_zoomTouchup); + .on("touchend.zoom", d3_behavior_zoomTouchup) + .on("click.zoom", d3_behavior_zoomClick, true); } // snapshot the local context for subsequent dispatch @@ -31,6 +32,7 @@ d3.behavior.zoom = function() { function mousedown() { start.apply(this, arguments); d3_behavior_zoomPanning = d3_behavior_zoomLocation(d3.svg.mouse(d3_behavior_zoomTarget)); + d3_behavior_zoomMoved = false; d3.event.preventDefault(); window.focus(); } @@ -76,7 +78,8 @@ var d3_behavior_zoomDiv, d3_behavior_zoomXyz, d3_behavior_zoomDispatch, d3_behavior_zoomTarget, - d3_behavior_zoomArguments; + d3_behavior_zoomArguments, + d3_behavior_zoomStopClick; function d3_behavior_zoomLocation(point) { return [ @@ -155,16 +158,28 @@ function d3_behavior_zoomTouchmove() { function d3_behavior_zoomMousemove() { d3_behavior_zoomZooming = null; - if (d3_behavior_zoomPanning) d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning); + if (d3_behavior_zoomPanning) { + d3_behavior_zoomMoved = true; + d3_behavior_zoomTo(d3_behavior_zoomXyz[2], d3.svg.mouse(d3_behavior_zoomTarget), d3_behavior_zoomPanning); + } } function d3_behavior_zoomMouseup() { if (d3_behavior_zoomPanning) { + if (d3_behavior_zoomMoved) d3_behavior_zoomStopClick = true; d3_behavior_zoomMousemove(); d3_behavior_zoomPanning = null; } } +function d3_behavior_zoomClick() { + if (d3_behavior_zoomStopClick) { + d3.event.stopPropagation(); + d3.event.preventDefault(); + d3_behavior_zoomStopClick = false; + } +} + function d3_behavior_zoomTo(z, x0, x1) { var K = Math.pow(2, (d3_behavior_zoomXyz[2] = z) - x1[2]), x = d3_behavior_zoomXyz[0] = x0[0] - K * x1[0], diff --git a/d3.behavior.min.js b/d3.behavior.min.js index d0c039f8..bf1c9cfa 100644 --- a/d3.behavior.min.js +++ b/d3.behavior.min.js @@ -1 +1 @@ -(function(){function p(a,b,c){function m(a,b){var c=a.__domain||(a.__domain=a.domain()),d=a.range().map(function(a){return(a-b)/l});a.domain(c).domain(d.map(a.invert))}var d=Math.pow(2,(f[2]=a)-c[2]),e=f[0]=b[0]-d*c[0],j=f[1]=b[1]-d*c[1],k=d3.event,l=Math.pow(2,a);d3.event={scale:l,translate:[e,j],transform:function(a,b){a&&m(a,e),b&&m(b,j)}};try{g.apply(h,i)}finally{d3.event=k}k.preventDefault()}function o(){b&&(n(),b=null)}function n(){c=null,b&&p(f[2],d3.svg.mouse(h),b)}function m(){var a=d3.svg.touches(h);switch(a.length){case 1:var b=a[0];p(f[2],b,d[b.identifier]);break;case 2:var c=a[0],e=a[1],g=[(c[0]+e[0])/2,(c[1]+e[1])/2],i=d[c.identifier],j=d[e.identifier],k=[(i[0]+j[0])/2,(i[1]+j[1])/2,i[2]];p(Math.log(d3.event.scale)/Math.LN2+i[2],g,k)}}function l(){var a=d3.svg.touches(h),b=-1,c=a.length,e;while(++b