仿照Google Maps的MapViewer
模仿Google Maps的MapViewer
下面要写的东西是一个使用GWT编写的在有限区域内通过拖动查看整个地图的简单实现。
一些细节:
- 为什么能拖?
com.google.gwt.user.client.ui.MouseListener 通过实现这个接口,可以实现UI对象对鼠标的Enter,Down,Leave,Move,Up动作的支持。
com.google.gwt.user.client.ui.FocusPanel 并不是每个UI对象都能够实现MouseListener接口的,可以通过添加到FocusPanel来实现。
- 怎么才能显示地图的局部,或者说怎么把其他部分藏起来?
通过样式:
java 代码
- DOM.setStyleAttribute(viewPortArea.getElement(), "overflow", "hidden");
- DOM.setStyleAttribute(viewPortArea.getElement(), "position","relative");
设置显示区域的"overflow"属性为"hidden"及"position"属性为"relative",图片可以实现局部显示显示框内。
代码:
java 代码
- package cn.gov.imwb.client;
- import com.google.gwt.user.client.DOM;
- import com.google.gwt.user.client.Event;
- import com.google.gwt.user.client.ui.AbsolutePanel;
- import com.google.gwt.user.client.ui.Composite;
- import com.google.gwt.user.client.ui.FocusPanel;
- import com.google.gwt.user.client.ui.Image;
- import com.google.gwt.user.client.ui.MouseListener;
- import com.google.gwt.user.client.ui.Widget;
- /**
- * @author sheva.wen
- *
- */
- public class MapViewerPanel extends Composite {
- public int areaHeight;
- public int areaWidth;
- public int centerLeft;
- public int centerTop;
- public int imageHeight;
- public String imageUrl;
- public int imageWidth;
- public int maxLeft;
- public int maxTop;
- public int minLeft;
- public int minTop;
- private Image image;
- private FocusPanel mouseListenerContainer;
- public double showPositionLeftRatio;
- public double showPositionTopRatio;
- private int startLeft;
- private int startTop;
- private int startX;
- private int startY;
- private int state = 0;//用于判断当前用户的鼠标动作
- private AbsolutePanel viewArea;
- private AbsolutePanel viewPortArea = new AbsolutePanel();
- /**
- *
- * @param areaWidth 显示区域的宽
- * @param areaHeight 显示区域的高
- * @param imageUrl 地图的链接
- * @param imageWidth 地图的宽
- * @param imageHeight 地图的高
- * @param showPositionLeftRatio 地图初始显示的位置 最左占宽度的比例
- * @param showPositionTopRatio 地图初始显示的位置 最上占宽度的比例
- */
- public MapViewerPanel(int areaWidth, int areaHeight, String imageUrl,
- int imageWidth, int imageHeight, double showPositionLeftRatio,
- double showPositionTopRatio) {
- mouseListenerContainer = new FocusPanel(viewPortArea);
- viewArea = new AbsolutePanel();
- /**
- * 将地图(图片)上的默认浏览器行为除去。
- */
- image = new Image(){
- /**
- * 这个部分必须紧跟在实例化过程的后面,不然就不起作用,没有在官方文档里找到原因。
- */
- public void onBrowserEvent (Event event)
- {
- DOM.eventPreventDefault(event);
- super.onBrowserEvent(event);
- }
- };
- viewArea.add(image);
- image.setPixelSize(imageWidth, imageHeight);
- image.setUrl(imageUrl);
- viewPortArea.setPixelSize(areaWidth, areaHeight);
- viewPortArea.addStyleName("viewportViewer");
- DOM.setStyleAttribute(viewPortArea.getElement(), "overflow", "hidden");
- DOM.setStyleAttribute(viewPortArea.getElement(), "position",
- "relative");
- initWidget(mouseListenerContainer);
- this.showPositionLeftRatio = showPositionLeftRatio;
- this.showPositionTopRatio = showPositionTopRatio;
- this.areaWidth = areaWidth;
- this.areaHeight = areaHeight;
- this.imageUrl = imageUrl;
- this.imageWidth = imageWidth;
- this.imageHeight = imageHeight;
- /**
- * 设置图片可被拖放的极限,防止图片被拖出边界
- */
- maxLeft = imageWidth - areaWidth;
- maxTop = imageHeight - areaHeight;
- minLeft = -(imageWidth - areaWidth);
- minTop = -(imageHeight - areaHeight);
- /**
- * 地图初始应该在的位置
- */
- centerLeft = (int) ((areaWidth - imageWidth) * showPositionLeftRatio);
- centerTop = (int) ((areaHeight - imageHeight) * showPositionTopRatio);
- viewPortArea.add(viewArea, centerLeft, centerTop);
- /**
- * 鼠标拖放的行为
- */
- MouseListener listener = new MouseListener(){
- public void onMouseDown(Widget sender, int x, int y) {
- state = 1;
- startX = x;
- startY = y;
- startLeft = viewPortArea.getWidgetLeft(viewArea);
- startTop = viewPortArea.getWidgetTop(viewArea);
- }
- public void onMouseEnter(Widget sender) {
- }
- public void onMouseLeave(Widget sender) {
- state = 0;
- DOM.setStyleAttribute(mouseListenerContainer.getElement(), "cursor", "default");
- }
- public void onMouseMove(Widget sender, int x, int y) {
- if(state == 1){
- DOM.setStyleAttribute(mouseListenerContainer.getElement(), "cursor", "move");
- if(viewPortArea.getWidgetLeft(viewArea) >= minLeft
- && viewPortArea.getWidgetLeft(viewArea) <= maxLeft
- && viewPortArea.getWidgetTop(viewArea) >= minTop
- && viewPortArea.getWidgetTop(viewArea) <= maxTop){
- viewPortArea.setWidgetPosition(viewArea,startLeft + (x - startX), startTop + (y - startY));
- }
- }
- }
- public void onMouseUp(Widget sender, int x, int y) {
- // TODO 缺报当拖放结束时,地图还在显示框内
- if(viewPortArea.getWidgetLeft(viewArea) < minLeft){
- viewPortArea.setWidgetPosition(viewArea, minLeft, viewPortArea.getWidgetTop(viewArea));
- }
- if(viewPortArea.getWidgetTop(viewArea) < minTop){
- viewPortArea.setWidgetPosition(viewArea, viewPortArea.getWidgetLeft(viewArea), minTop);
- }
- if(viewPortArea.getWidgetLeft(viewArea) > 0){
- viewPortArea.setWidgetPosition(viewArea, 0, viewPortArea.getWidgetTop(viewArea));
- }
- if(viewPortArea.getWidgetTop(viewArea) > 0){
- viewPortArea.setWidgetPosition(viewArea, viewPortArea.getWidgetLeft(viewArea), 0);
- }
- state = 0;
- DOM.setStyleAttribute(mouseListenerContainer.getElement(), "cursor", "default");
- }
- };
- mouseListenerContainer.addMouseListener(listener);
- }
- }
代码很容易理解,这只是一个很简易的实现,至少还有以下需要完善:
- 地图分块载入
- 支持鼠标滚轮的缩放
- “鹰眼”功能。
感兴趣的跟进一下:)
1 楼
liuxyu
2007-09-29
用GWT做google map我有兴趣。
先试了下你的demo。在滕讯浏览器下脚本错误,不能运行。IE下正常。
程序还没来得及看。
先试了下你的demo。在滕讯浏览器下脚本错误,不能运行。IE下正常。
程序还没来得及看。
2 楼
sheva.wen
2007-09-30
感兴趣就跟进以下:)
我用TT查看过了,好像没什么问题。
把脚本错误发来看看。
我用TT查看过了,好像没什么问题。
把脚本错误发来看看。
3 楼
liuxyu
2007-10-01
行: 3
字符: 39
错误: 尚未实现
代码: 0
我刚系统重装。tt版本可能有点老。2.02
不过之前的tt应该比较新
字符: 39
错误: 尚未实现
代码: 0
我刚系统重装。tt版本可能有点老。2.02
不过之前的tt应该比较新
4 楼
sheva.wen
2007-10-02
@liuxyu
看不出什么,IE报错太恶心。
不想在这个问题上花时间了。
看不出什么,IE报错太恶心。
不想在这个问题上花时间了。
5 楼
纯情小火鸡
2008-01-29
请问楼主 还有没有实现其他的功能了?比如加载地图图片 赢眼等的啊 能留下你的联系方式吗?
6 楼
纯情小火鸡
2008-01-30
<div class='quote_title'>sheva.wen 写道</div><div class='quote_div'><p>下面要写的东西是一个使用GWT编写的在有限区域内通过拖动查看整个地图的简单实现。</p><p> <strong>一些细节:</strong></p><ol style='margin-right: 0px;'><li>为什么能拖? <p><span style='font-family: Arial;'><a href='http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.MouseListener.html'>com.google.gwt.user.client.ui.MouseListener</a> 通过实现这个接口,可以实现UI对象对鼠标的Enter,Down,Leave,Move,Up动作的支持。</span></p><p><span style='font-family: Arial;'><span style='font-family: Arial;'><a href='http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.FocusPanel.html'>com.google.gwt.user.client.ui.FocusPanel</a> 并不是每个UI对象都能够实现MouseListener接口的,可以通过添加到FocusPanel来实现。</span></span></p><span style='font-family: Arial;'/></li><li>怎么才能显示地图的局部,或者说怎么把其他部分藏起来? </li></ol><blockquote dir='ltr' style='margin-right: 0px;'><p dir='ltr'>通过样式:</p><div class='code_title'>java 代码</div><div class='dp-highlighter'><ol class='dp-j'><li class='alt'><span><span>DOM.setStyleAttribute(viewPortArea.getElement(), </span><span class='string'>"overflow"</span><span>, </span><span class='string'>"hidden"</span><span>); </span></span> </li><li><span> </span> </li><li class='alt'><span>DOM.setStyleAttribute(viewPortArea.getElement(), </span><span class='string'>"position"</span><span>,</span><span class='string'>"relative"</span><span>); </span> </li></ol></div><p>设置显示区域的"overflow"属性为"hidden"及"position"属性为"relative",图片可以实现局部显示显示框内。</p></blockquote><p dir='ltr'><strong>代码:</strong></p><blockquote dir='ltr' style='margin-right: 0px;'><div class='code_title'>java 代码</div><div class='dp-highlighter'><ol class='dp-j'><li class='alt'><span><span class='keyword'>package</span><span> cn.gov.imwb.client; </span></span> </li><li><span> </span> </li><li class='alt'><span class='keyword'>import</span><span> com.google.gwt.user.client.DOM; </span> </li><li><span class='keyword'>import</span><span> com.google.gwt.user.client.Event; </span> </li><li class='alt'><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.AbsolutePanel; </span> </li><li><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.Composite; </span> </li><li class='alt'><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.FocusPanel; </span> </li><li><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.Image; </span> </li><li class='alt'><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.MouseListener; </span> </li><li><span class='keyword'>import</span><span> com.google.gwt.user.client.ui.Widget; </span> </li><li class='alt'><span> </span> </li><li><span class='comment'>/** </span> </li><li class='alt'><span><span class='comment'> * @author sheva.wen </span> </span> </li><li><span><span class='comment'> * </span> </span> </li><li class='alt'><span><span class='comment'> */</span><span> </span></span> </li><li><span class='keyword'>public</span><span> </span><span class='keyword'>class</span><span> MapViewerPanel </span><span class='keyword'>extends</span><span> Composite { </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> areaHeight; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> areaWidth; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> centerLeft; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> centerTop; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> imageHeight; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> String imageUrl; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> imageWidth; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> maxLeft; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> maxTop; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> minLeft; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>int</span><span> minTop; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> Image image; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> FocusPanel mouseListenerContainer; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>double</span><span> showPositionLeftRatio; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>double</span><span> showPositionTopRatio; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> startLeft; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> startTop; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> startX; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> startY; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> state = </span><span class='number'>0</span><span>;</span><span class='comment'>//用于判断当前用户的鼠标动作 </span><span> </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> AbsolutePanel viewArea; </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>private</span><span> AbsolutePanel viewPortArea = </span><span class='keyword'>new</span><span> AbsolutePanel(); </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='comment'>/** </span> </li><li><span><span class='comment'> * </span> </span> </li><li class='alt'><span><span class='comment'> * @param areaWidth 显示区域的宽 </span> </span> </li><li><span><span class='comment'> * @param areaHeight 显示区域的高 </span> </span> </li><li class='alt'><span><span class='comment'> * @param imageUrl 地图的链接 </span> </span> </li><li><span><span class='comment'> * @param imageWidth 地图的宽 </span> </span> </li><li class='alt'><span><span class='comment'> * @param imageHeight 地图的高 </span> </span> </li><li><span><span class='comment'> * @param showPositionLeftRatio 地图初始显示的位置 最左占宽度的比例 </span> </span> </li><li class='alt'><span><span class='comment'> * @param showPositionTopRatio 地图初始显示的位置 最上占宽度的比例 </span> </span> </li><li><span><span class='comment'> */</span><span> </span></span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> MapViewerPanel(</span><span class='keyword'>int</span><span> areaWidth, </span><span class='keyword'>int</span><span> areaHeight, String imageUrl, </span> </li><li><span> </span><span class='keyword'>int</span><span> imageWidth, </span><span class='keyword'>int</span><span> imageHeight, </span><span class='keyword'>double</span><span> showPositionLeftRatio, </span> </li><li class='alt'><span> </span><span class='keyword'>double</span><span> showPositionTopRatio) { </span> </li><li><span> mouseListenerContainer = </span><span class='keyword'>new</span><span> FocusPanel(viewPortArea); </span> </li><li class='alt'><span> viewArea = </span><span class='keyword'>new</span><span> AbsolutePanel(); </span> </li><li><span> </span><span class='comment'>/** </span> </li><li class='alt'><span><span class='comment'> * 将地图(图片)上的默认浏览器行为除去。 </span> </span> </li><li><span><span class='comment'> */</span><span> </span></span> </li><li class='alt'><span> image = </span><span class='keyword'>new</span><span> Image(){ </span> </li><li><span> </span><span class='comment'>/** </span> </li><li class='alt'><span><span class='comment'> * 这个部分必须紧跟在实例化过程的后面,不然就不起作用,没有在官方文档里找到原因。 </span> </span> </li><li><span><span class='comment'> */</span><span> </span></span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onBrowserEvent (Event event) </span> </li><li><span> { </span> </li><li class='alt'><span> DOM.eventPreventDefault(event); </span> </li><li><span> </span><span class='keyword'>super</span><span>.onBrowserEvent(event); </span> </li><li class='alt'><span> } </span> </li><li><span> </span> </li><li class='alt'><span> }; </span> </li><li><span> viewArea.add(image); </span> </li><li class='alt'><span> image.setPixelSize(imageWidth, imageHeight); </span> </li><li><span> image.setUrl(imageUrl); </span> </li><li class='alt'><span> </span> </li><li><span> viewPortArea.setPixelSize(areaWidth, areaHeight); </span> </li><li class='alt'><span> viewPortArea.addStyleName(</span><span class='string'>"viewportViewer"</span><span>); </span> </li><li><span> DOM.setStyleAttribute(viewPortArea.getElement(), </span><span class='string'>"overflow"</span><span>, </span><span class='string'>"hidden"</span><span>); </span> </li><li class='alt'><span> </span> </li><li><span> DOM.setStyleAttribute(viewPortArea.getElement(), </span><span class='string'>"position"</span><span>, </span> </li><li class='alt'><span> </span><span class='string'>"relative"</span><span>); </span> </li><li><span> initWidget(mouseListenerContainer); </span> </li><li class='alt'><span> </span> </li><li><span> </span> </li><li class='alt'><span> </span> </li><li><span> </span><span class='keyword'>this</span><span>.showPositionLeftRatio = showPositionLeftRatio; </span> </li><li class='alt'><span> </span><span class='keyword'>this</span><span>.showPositionTopRatio = showPositionTopRatio; </span> </li><li><span> </span><span class='keyword'>this</span><span>.areaWidth = areaWidth; </span> </li><li class='alt'><span> </span><span class='keyword'>this</span><span>.areaHeight = areaHeight; </span> </li><li><span> </span><span class='keyword'>this</span><span>.imageUrl = imageUrl; </span> </li><li class='alt'><span> </span><span class='keyword'>this</span><span>.imageWidth = imageWidth; </span> </li><li><span> </span><span class='keyword'>this</span><span>.imageHeight = imageHeight; </span> </li><li class='alt'><span> </span> </li><li><span> </span><span class='comment'>/** </span> </li><li class='alt'><span><span class='comment'> * 设置图片可被拖放的极限,防止图片被拖出边界 </span> </span> </li><li><span><span class='comment'> */</span><span> </span></span> </li><li class='alt'><span> </span> </li><li><span> maxLeft = imageWidth - areaWidth; </span> </li><li class='alt'><span> maxTop = imageHeight - areaHeight; </span> </li><li><span> minLeft = -(imageWidth - areaWidth); </span> </li><li class='alt'><span> minTop = -(imageHeight - areaHeight); </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='comment'>/** </span> </li><li><span><span class='comment'> * 地图初始应该在的位置 </span> </span> </li><li class='alt'><span><span class='comment'> */</span><span> </span></span> </li><li><span> centerLeft = (</span><span class='keyword'>int</span><span>) ((areaWidth - imageWidth) * showPositionLeftRatio); </span> </li><li class='alt'><span> centerTop = (</span><span class='keyword'>int</span><span>) ((areaHeight - imageHeight) * showPositionTopRatio); </span> </li><li><span> </span> </li><li class='alt'><span> viewPortArea.add(viewArea, centerLeft, centerTop); </span> </li><li><span> </span><span class='comment'>/** </span> </li><li class='alt'><span><span class='comment'> * 鼠标拖放的行为 </span> </span> </li><li><span><span class='comment'> */</span><span> </span></span> </li><li class='alt'><span> MouseListener listener = </span><span class='keyword'>new</span><span> MouseListener(){ </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onMouseDown(Widget sender, </span><span class='keyword'>int</span><span> x, </span><span class='keyword'>int</span><span> y) { </span> </li><li><span> state = </span><span class='number'>1</span><span>; </span> </li><li class='alt'><span> startX = x; </span> </li><li><span> startY = y; </span> </li><li class='alt'><span> startLeft = viewPortArea.getWidgetLeft(viewArea); </span> </li><li><span> startTop = viewPortArea.getWidgetTop(viewArea); </span> </li><li class='alt'><span> </span> </li><li><span> } </span> </li><li class='alt'><span> </span> </li><li><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onMouseEnter(Widget sender) { </span> </li><li class='alt'><span> </span> </li><li><span> } </span> </li><li class='alt'><span> </span> </li><li><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onMouseLeave(Widget sender) { </span> </li><li class='alt'><span> state = </span><span class='number'>0</span><span>; </span> </li><li><span> DOM.setStyleAttribute(mouseListenerContainer.getElement(), </span><span class='string'>"cursor"</span><span>, </span><span class='string'>"default"</span><span>); </span> </li><li class='alt'><span> } </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onMouseMove(Widget sender, </span><span class='keyword'>int</span><span> x, </span><span class='keyword'>int</span><span> y) { </span> </li><li><span> </span><span class='keyword'>if</span><span>(state == </span><span class='number'>1</span><span>){ </span> </li><li class='alt'><span> DOM.setStyleAttribute(mouseListenerContainer.getElement(), </span><span class='string'>"cursor"</span><span>, </span><span class='string'>"move"</span><span>); </span> </li><li><span> </span><span class='keyword'>if</span><span>(viewPortArea.getWidgetLeft(viewArea) >= minLeft </span> </li><li class='alt'><span> && viewPortArea.getWidgetLeft(viewArea) <= maxLeft </span> </li><li><span> && viewPortArea.getWidgetTop(viewArea) >= minTop </span> </li><li class='alt'><span> && viewPortArea.getWidgetTop(viewArea) <= maxTop){ </span> </li><li><span> viewPortArea.setWidgetPosition(viewArea,startLeft + (x - startX), startTop + (y - startY)); </span> </li><li class='alt'><span> } </span> </li><li><span> } </span> </li><li class='alt'><span> } </span> </li><li><span> </span> </li><li class='alt'><span> </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> onMouseUp(Widget sender, </span><span class='keyword'>int</span><span> x, </span><span class='keyword'>int</span><span> y) { </span> </li><li><span> </span><span class='comment'>// TODO 缺报当拖放结束时,地图还在显示框内 </span><span> </span> </li><li class='alt'><span> </span><span class='keyword'>if</span><span>(viewPortArea.getWidgetLeft(viewArea) < minLeft){ </span> </li><li><span> viewPortArea.setWidgetPosition(viewArea, minLeft, viewPortArea.getWidgetTop(viewArea)); </span> </li><li class='alt'><span> } </span> </li><li><span> </span><span class='keyword'>if</span><span>(viewPortArea.getWidgetTop(viewArea) < minTop){ </span> </li><li class='alt'><span> viewPortArea.setWidgetPosition(viewArea, viewPortArea.getWidgetLeft(viewArea), minTop); </span> </li><li><span> } </span> </li><li class='alt'><span> </span><span class='keyword'>if</span><span>(viewPortArea.getWidgetLeft(viewArea) > </span><span class='number'>0</span><span>){ </span> </li><li><span> viewPortArea.setWidgetPosition(viewArea, </span><span class='number'>0</span><span>, viewPortArea.getWidgetTop(viewArea)); </span> </li><li class='alt'><span> } </span> </li><li><span> </span><span class='keyword'>if</span><span>(viewPortArea.getWidgetTop(viewArea) > </span><span class='number'>0</span><span>){ </span> </li><li class='alt'><span> viewPortArea.setWidgetPosition(viewArea, viewPortArea.getWidgetLeft(viewArea), </span><span class='number'>0</span><span>); </span> </li><li><span> } </span> </li><li class='alt'><span> state = </span><span class='number'>0</span><span>; </span> </li><li><span> DOM.setStyleAttribute(mouseListenerContainer.getElement(), </span><span class='string'>"cursor"</span><span>, </span><span class='string'>"default"</span><span>); </span> </li><li class='alt'><span> } </span> </li><li><span> </span> </li><li class='alt'><span> }; </span> </li><li><span> mouseListenerContainer.addMouseListener(listener); </span> </li><li class='alt'><span> </span> </li><li><span> } </span> </li><li class='alt'><span> </span> </li><li><span>} </span> </li></ol></div><p>代码很容易理解,这只是一个很简易的实现,至少还有以下需要完善:</p><ol><li>地图分块载入 </li><li>支持鼠标滚轮的缩放 </li><li>“鹰眼”功能。 </li></ol><p>感兴趣的跟进一下:)</p></blockquote></div>
7 楼
darkfxux
2008-02-01
邮箱多少,有写问题想问啊
8 楼
darkfxux
2008-02-02
感兴趣,楼主如何EMAIL多少