SharpMap AjaxMapControl 中 Zoomin/Zoomout 操作时冻结问题

1、现象:
在放大/缩小操作时,当 Map.width = Map.MaximumZoom 时再次执行Zoomout  或者当 Map.width = Map.MinimumZoom 时再次执行Zoomin,浏览器显示的地图处于冻结状态(刷新地图停止);同时,鼠标光标处于长久的等待(wait)状态。

2、原因:
客户端 javascript 脚本在响应鼠标事件处理时发生事件重入。

3、解决方法:
修改AjaxMap.js 中的SharpMap_BeginZoom 函数
function SharpMap_BeginZoom(obj,x,y,zoomval)
{
 if(obj.zoomEnded==0) return;
 if(obj.zoom/zoomval<obj.minZoom) zoomval = obj.zoom/obj.minZoom;
 if(obj.zoom/zoomval>obj.maxZoom) zoomval = obj.zoom/obj.maxZoom;
 //当控制动态缩放的zoomval值为1时停止动态缩放并退出
 if(Math.abs(1-zoomval)<0.0001) return;
 obj.zoomEnded=0;
 obj.container.style.cursor = 'wait';
 var position = WebForm_GetElementPosition(obj.container);
 var imgX = x-position.x;
 var imgY = y-position.y;
 var center = SharpMap_PixelToMap(imgX+(obj.container.offsetWidth*0.5-imgX)/zoomval,imgY+(obj.container.offsetHeight*0.5-imgY)/zoomval,obj);
 obj.zoom = obj.zoom/zoomval;
 obj.minX = center.x - obj.zoom*0.5;
 obj.maxY = center.y + obj.zoom*obj.container.offsetHeight/obj.container.offsetWidth*0.5;
 SharpMap_BeginRefreshMap(obj,1); //Start refreshing the map while we're zooming
 SharpMap_DynamicZoom((position.x-x)*(zoomval-1),(position.y-y)*(zoomval-1),zoomval,0.0,obj);
}

4、修改后的测试结果:
a) 解决了鼠标 Click 缩放操作冻结问题;
b) 鼠标滚轮缩放操作仍有冻结(原因猜测中……);
 

阅读更多
个人分类: SharpMap Projects
想对作者说点什么? 我来说一句

flex 图片查看器

2010年04月16日 341KB 下载

android页面切换效果

2011年11月16日 53KB 下载

flex图片查看器汇总

2010年04月16日 25.21MB 下载

android界面效果全汇总

2011年08月26日 256KB 下载

没有更多推荐了,返回首页

不良信息举报

SharpMap AjaxMapControl 中 Zoomin/Zoomout 操作时冻结问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭