下载文件块javascript事件?

时间:2011-08-30 11:15:12

标签: javascript javascript-events google-maps-api-3

我正在创建一个内置WebBrowser控件的.Net库。该库通常应该在其他应用程序中处理谷歌地图。基本上所有必要的google maps api事件都会发送到我的c#lib,然后使用它传递给app。

一切正常,直到使用我的lib的应用程序想要在点击时更改标记图标并在双击时执行不同的操作。在这种情况下,应用程序会在c#级别更改标记图标,而这又会调用javascript函数来更改地图上的图标:

function SetMarkerIcon(id, imageUri) {
    markers[id].setIcon(imageUri);
 }

我调试了这个问题,结果是javascript冻结直到图像文件被下载,并且对第二次点击没有响应,这应该触发'dblclick'事件。所以我的第一个问题是这是否是正确的思考方式。

基于这个假设,我尝试使用setTimeout延迟下载文件:

function SetMarkerIcon(id, imageUri) {
    setTimeout(function () { markers[id].setIcon(imageUri); }, 200);
 }

但显然这个解决方案非常“脏”(虽然在测试环境中工作,实际上它在使用本地.js文件时工作甚至延迟0ms,可能是因为setTimeout使用了一种单独的线程,但是没有使用脚本服务器),因此第二个问题:你有没有任何有用的想法如何正确解决这个错误?

如果问题有点含糊,请提前致谢并抱歉。

1 个答案:

答案 0 :(得分:1)

您可以使用精灵快速切换标记的图标。您将所有图标作为精灵存储在常规网格位置的一个文件中。您只将此文件加载到浏览器中。您可以通过更改精灵的原点来切换图标。这是一个典型的实现:

var pos = new google.maps.LatLng(0, 0);
var url = "/.../sprites.png";             // file with all icons as sprites
var size = new google.maps.Size(24, 24);  // size of 1 sprite
var origin = new google.maps.Point(0, 0);
var anchorPos = new google.maps.Point(12, 12);
var icon = new google.maps.MarkerImage(url, size, origin, anchorPos);
var marker = new google.maps.Marker({       
    position: new google.maps.LatLng(0, 0),       
    map: map,     
    icon: icon
}); 

marker.getIcon().origin = new google.maps.Point(5 * 24, 0);  // set the icon to the 5'th sprite