@@ -12,11 +12,9 @@ d3.behavior.zoom = function() {
1212 touchtime ; // time of last touchstart (to detect double-tap)
1313
1414 function zoom ( ) {
15- this
16- . on ( "mousedown.zoom" , mousedown )
17- . on ( "mousewheel.zoom" , mousewheel )
15+ this . on ( "mousedown.zoom" , mousedown )
1816 . on ( "mousemove.zoom" , mousemove )
19- . on ( "DOMMouseScroll .zoom", mousewheel )
17+ . on ( d3_behavior_zoomWheel + " .zoom", mousewheel )
2018 . on ( "dblclick.zoom" , dblclick )
2119 . on ( "touchstart.zoom" , touchstart )
2220 . on ( "touchmove.zoom" , touchmove )
@@ -95,10 +93,10 @@ d3.behavior.zoom = function() {
9593 event_ = event . of ( target , arguments ) ,
9694 eventTarget = d3 . event . target ,
9795 moved = 0 ,
98- w = d3 . select ( window ) . on ( "mousemove.zoom" , mousemove ) . on ( "mouseup.zoom" , mouseup ) ,
96+ w = d3 . select ( d3_window ) . on ( "mousemove.zoom" , mousemove ) . on ( "mouseup.zoom" , mouseup ) ,
9997 l = location ( d3 . mouse ( target ) ) ;
10098
101- window . focus ( ) ;
99+ d3_window . focus ( ) ;
102100 d3_eventCancel ( ) ;
103101
104102 function mousemove ( ) {
@@ -175,34 +173,10 @@ d3.behavior.zoom = function() {
175173 return d3 . rebind ( zoom , event , "on" ) ;
176174} ;
177175
178- var d3_behavior_zoomDiv , // for interpreting mousewheel events
179- d3_behavior_zoomInfinity = [ 0 , Infinity ] ; // default scale extent
180-
181- function d3_behavior_zoomDelta ( ) {
182-
183- // mousewheel events are totally broken!
184- // https://bugs.webkit.org/show_bug.cgi?id=40441
185- // not only that, but Chrome and Safari differ in re. to acceleration!
186- if ( ! d3_behavior_zoomDiv ) {
187- d3_behavior_zoomDiv = d3 . select ( "body" ) . append ( "div" )
188- . style ( "visibility" , "hidden" )
189- . style ( "top" , 0 )
190- . style ( "height" , 0 )
191- . style ( "width" , 0 )
192- . style ( "overflow-y" , "scroll" )
193- . append ( "div" )
194- . style ( "height" , "2000px" )
195- . node ( ) . parentNode ;
196- }
197-
198- var e = d3 . event , delta ;
199- try {
200- d3_behavior_zoomDiv . scrollTop = 1000 ;
201- d3_behavior_zoomDiv . dispatchEvent ( e ) ;
202- delta = 1000 - d3_behavior_zoomDiv . scrollTop ;
203- } catch ( error ) {
204- delta = e . wheelDelta || ( - e . detail * 5 ) ;
205- }
176+ var d3_behavior_zoomInfinity = [ 0 , Infinity ] ; // default scale extent
206177
207- return delta ;
208- }
178+ // https://developer.mozilla.org/en-US/docs/Mozilla_event_reference/wheel
179+ var d3_behavior_zoomDelta , d3_behavior_zoomWheel
180+ = "onwheel" in document ? ( d3_behavior_zoomDelta = function ( ) { return - d3 . event . deltaY * ( d3 . event . deltaMode ? 120 : 1 ) ; } , "wheel" )
181+ : "onmousewheel" in document ? ( d3_behavior_zoomDelta = function ( ) { return d3 . event . wheelDelta ; } , "mousewheel" )
182+ : ( d3_behavior_zoomDelta = function ( ) { return - d3 . event . detail ; } , "MozMousePixelScroll" ) ;
0 commit comments