2011-09-20 84 views
0

我試圖讓Google地圖能夠平滑地平滑過渡,除非用戶將鼠標移動到地圖上。使用「空閒」事件處理程序會導致不穩定的平移動畫。使用其他事件不會給我結果。遞歸我的initPan()函數只是導致頁面崩潰。 「空閒」連續平移方法的示例hereGoogle Maps JavaScript API V3 - 連續平移

function initialize() { 
    var myOptions = { 
     zoom: 5, 
     center: markers.sanjose, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_canvas'), 
      myOptions); 

    google.maps.event.addListener(map, 'idle', function() { 
     initPan(map); 
    }); 

    google.maps.event.addListener(map, 'mouseout', function() { 
     stopPan(map); 
    }); 
} 

function initPan(map) { 
    map.panBy(5, 0); 
} 

function stopPan(){ 
} 

回答

5

沒有太多的意見,沒有意見,但這是我的解決方案,如果有人遇到過這種情況。

在用戶事件觸發重複方法,如panBy(),我遇到了API V3的問題。雖然V2有'移動'事件,但它被替換爲'空閒'事件。然而,「閒置」在鍋出現後有一個短暫的延遲。另一種選擇是使用'bounds_changed'事件,但該事件每秒觸發多次,導致地圖不加載切片(因此沒有平移外觀)。

我終於通過給'bounds_changed'添加一個超時延遲來解決這個問題,清除將在多個事件觸發器上堆棧的超時。這是解決問題的代碼片段。

google.maps.event.addListener(map, 'bounds_changed', function() { 
    if (moving) { 
    if (myTimeout) { 
     window.clearTimeout(myTimeout); 
    } 
    myTimeout = window.setTimeout(initPan(map), 2200); 
    } 
}); 

我發現了API forum的解決方案,你可以看到我的工作連續平移here的例子。如果這沒有任何意義,請查看示例中的完整代碼,祝你好運。

+0

這非常整齊。感謝分享! – ampersand

+0

1件事情...現在試試這個,並且沒有找到「移動」變量有一個問題。我在哪裏初始化? – ied3vil