Skip to content

Commit 1517bec

Browse files
attempt 1 to fix firefox pan lag
1 parent d33ac21 commit 1517bec

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

js/tracker.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,35 @@ var maptype_ids = ["roadmap","satellite","terrain"]
221221
for(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+
224253
function 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

Comments
 (0)