@@ -221,6 +221,35 @@ var maptype_ids = ["roadmap","satellite","terrain"]
221221for ( var i in maptypes ) maptype_ids . push ( i ) ;
222222
223223
224+ // mousemove event throttle hack for smoother maps pan on firefox and IE
225+ // taken from: http://stackoverflow.com/questions/22306130/how-to-limit-google-maps-api-lag-when-panning-the-map-with-lots-of-markers-and-p
226+
227+ var mthrottle_last = {
228+ time : 0 , // last time we let an event pass.
229+ x : - 100 , // last x position af the event that passed.
230+ y : - 100 // last y position af the event that passed.
231+ } ;
232+ var mthrottle_period = 16 ; // ms - don't let pass more than one event every 100ms.
233+ var mthrottle_space = 40 ; // px - let event pass if distance between the last and
234+ // current position is greater than 2 px.
235+
236+ function throttle_events ( event ) {
237+ var now = window . performance . now ( ) ;
238+ var distance = Math . sqrt ( Math . pow ( event . clientX - mthrottle_last . x , 2 ) + Math . pow ( event . clientY - mthrottle_last . y , 2 ) ) ;
239+ var time = now - mthrottle_last . time ;
240+ if ( distance * time < mthrottle_space * mthrottle_period ) { //event arrived too soon or mouse moved too little or both
241+ if ( event . stopPropagation ) { // W3C/addEventListener()
242+ event . stopPropagation ( ) ;
243+ } else { // Older IE.
244+ event . cancelBubble = true ;
245+ } ;
246+ } else {
247+ mthrottle_last . time = now ;
248+ mthrottle_last . x = event . clientX ;
249+ mthrottle_last . y = event . clientY ;
250+ } ;
251+ } ;
252+
224253function load ( ) {
225254 //initialize map object
226255 map = new google . maps . Map ( document . getElementById ( 'map' ) , {
@@ -242,6 +271,11 @@ function load() {
242271 } ,
243272 scrollwheel : true
244273 } ) ;
274+
275+ if ( window . performance && window . performance . now && window . navigator . userAgent . indexOf ( "Firefox" ) != - 1 ) {
276+ document . getElementById ( 'map' ) . addEventListener ( "mousemove" , throttle_events , true ) ;
277+ }
278+
245279 // register custom map types
246280 for ( var i in maptypes ) {
247281 map . mapTypes . set ( i , new google . maps . ImageMapType ( {
0 commit comments