同样的标题后面加了一个括弧,不是为了增减博文数量,而确实是上个功能的完善,标注为续,意思是继续上次的内容,来说说如何自定义InfoWindow。

在上一讲中,实现了InfoWindow的显示,但是并没有实现地图拖动地图InfoWindow随着联动,以及缩放地图InfoWindow随着联动的问题,在本文章中,就上述两个问题提供一个解决思路。

首先,说说拖动地图InfoWindow的联动。拖动地图时,地图并未做缩放,所以只是做一个位置的偏移,因此,定义一个公共变量,记录InfoWindow出来时候的屏幕位置,拖动鼠标时获取鼠标的相对变化,再讲InfoWindow做一相对应的偏移即可:

var beforePoint; //定义InfoWindow出现的上一位置
function leftClick(evt){
    infowin.style.display="none";
    var strtitle="城市名称"
    var strcontent = "****是一座美丽的城市<br><br>****是一座好看的城市<br><br>****是一座富饶的城市<br><br>****是一座漂亮的城市";
    title.innerHTML = strtitle;
    content.innerHTML = strcontent;
    var screenpoint = map.toScreen(evt.mapPoint);
    beforeMapPoint = evt.mapPoint;
    beforePoint=screenpoint;
    showinfowindow(screenpoint.x,screenpoint.y);
}
map.on("pan",function(pan){
	var movePoint=pan.delta;
	showinfowindow((beforePoint.x+movePoint.x),(beforePoint.y+movePoint.y))
})
map.on("pan-end",function(panend){
	var movedelta=panend.delta;
	beforePoint.x=beforePoint.x+movedelta.x;
	beforePoint.y=beforePoint.y+movedelta.y;
})

这样,拖动鼠标,infoWindow会随着鼠标的移动而移动。

接着,我们说说缩放时InfoWindow的联动。缩放时的联动的逻辑是记录InfoWindow首次出现的地图点的坐标,当缩放结束后将首次出现的地图点转换为屏幕坐标,再将其显示出来。

map.on("zoom-end",function(){
	var zoomPoint = map.toScreen(beforeMapPoint);
	showinfowindow(zoomPoint.x,zoomPoint.y);
	beforePoint=zoomPoint;
})	

怎么样,很简单吧,下面一并将全的代码附上:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Feature Layer - display results as an InfoWindow onHover</title>

    <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/dojo/dijit/themes/claro/claro.css">
	<link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/dojo/dijit/themes/tundra/tundra.css">
    <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/esri/css/esri.css">
	<style>
      html, body, #mapDiv
	  {
        padding:0;
        margin:0;
        height:100%;
		font-size:10px;
		position: relative;
      }
	  #infowin
	  {
		  display:none;
		  z-index:10000;
	  }
	  #close
	  {
		  float:right;
		  padding-top:10px;
		  font-weight:bold;
		  font-size:12px;
		  color:#FFF;
		  border:#000 1px solid;
		  height:20px;
		  width:20px;
		  text-align:center;
	  }
	   #close:hover
	  {
		  cursor:pointer;
	  }
	  #title
	  {
		  background-color:#666;
		  padding:10px;
		  font-weight:bold;
		  font-size:12px;
	  }
	  #content
	  {
		  padding-left:10px;
		  padding-top:10px;
		  background-color:#999;
		  height:200px;
	  }
	  #arrow
	  {
		  background-image:url(arrow.png);
		  height:30px;
	  }
    </style>
    <script src="http://js.arcgis.com/3.9/"></script>
    <script>
	  var dmap,infowin,colse,title,content;
	  var width=400,height=230,offset=50;	  

	  var closeInfoWin = function (evt){
		  infowin=document.getElementById("infowin");
		  infowin.style.display="none";
	  }; 

	  require([
        "esri/map", //地图
		"esri/layers/ArcGISTiledMapServiceLayer",
		"esri/layers/FeatureLayer",//特征层
		"esri/symbols/PictureMarkerSymbol",//图片点符号
        "esri/renderers/SimpleRenderer", //简单渲染
		"esri/graphic", //图片
		"esri/lang",
		"dojo/domReady!"
      ], function(
        Map,ArcGISTiledMapServiceLayer,FeatureLayer,PictureMarkerSymbol,SimpleRenderer,esriLang
      ) {
		var beforePoint;
		var beforeMapPoint; 

        var map = new Map("mapDiv", {
		  logo:false,
          center: [106.6854, 35.8364],
          zoom: 4,
          slider: true
        });	

		var shpServiceURL="**************************************";
		var shpTitlelayer=new ArcGISTiledMapServiceLayer(shpServiceURL);
		map.addLayer(shpTitlelayer);

		//--------------------------------------------------------------------------------------------------------
		var featurelayercity = new FeatureLayer("**************************************************", {
          mode: FeatureLayer.MODE_SNAPSHOT,
          outFields: ["*"]
        });
	    var pmsRed = new PictureMarkerSymbol('../images/location_icon_blue.png', 20, 20).setOffset(0, 15);
		//简单渲染
		var sr=new SimpleRenderer(pmsRed);
		featurelayercity.setRenderer(sr);
        map.addLayer(featurelayercity);	

		dmap=document.getElementById("mapDiv");
		infowin = document.getElementById("infowin");
	 	colse = document.getElementById("close");
	  	title = document.getElementById("title");
	  	content = document.getElementById("content");

		function showinfowindow(x,y){
			infowin.style.left=(x-width/2)+"px";
			infowin.style.top=(y-height-offset)+"px";
			infowin.style.position="absolute";
			infowin.style.width=width+"px";
			infowin.style.height=height+"px";
			infowin.style.display="block";
		};

		function leftClick(evt){
			infowin.style.display="none";
			var strtitle="城市名称"
		  	var strcontent = "****是一座美丽的城市<br><br>****是一座好看的城市<br><br>****是一座富饶的城市<br><br>****是一座漂亮的城市";
			title.innerHTML = strtitle;
			content.innerHTML = strcontent;
			var screenpoint = map.toScreen(evt.mapPoint);
			beforeMapPoint = evt.mapPoint;
			beforePoint=screenpoint;
			showinfowindow(screenpoint.x,screenpoint.y);
		}
		//鼠标单击
		featurelayercity.on("click", leftClick);	

	    map.on("pan",function(pan){
		  var movePoint=pan.delta;
		  showinfowindow((beforePoint.x+movePoint.x),(beforePoint.y+movePoint.y))
	   })
	    map.on("pan-end",function(panend){
		  var movedelta=panend.delta;
		  beforePoint.x=beforePoint.x+movedelta.x;
		  beforePoint.y=beforePoint.y+movedelta.y;
	   })
	    map.on("zoom-end",function(){
		  var zoomPoint = map.toScreen(beforeMapPoint);
		  showinfowindow(zoomPoint.x,zoomPoint.y);
		  beforePoint=zoomPoint;
	   })
      });
    </script>
  </head>
  <body class="tundra">
    <div id="mapDiv">
    	<div id="infowin">
        	<div id="close" onClick="closeInfoWin()">X</div>
            <div id="title"></div>
            <div id="content"></div>
            <div id="arrow"></div>
        </div>
    </div>
  </body>
</html>

lzugis——Arcgis Server for JavaScript API之自定义InfoWindow(续)的更多相关文章

  1. lzugis——Arcgis Server for JavaScript API之自定义InfoWindow

    各位看到这个标题不要嫌烦,因为本人最近一直在研究相关的问题,所以相关文章也只能是这些,同时希望看过我的文章的朋友,我的文章能够给你帮助. 在前面的两篇相关的文章里面,实现InfoWindow是通过di ...

  2. Arcgis Server for JavaScript API之自定义InfoWindow

    各位看到这个标题不要嫌烦,因为本人最近一直在研究相关的问题,所以相关文章也只能是这些,同时希望看过我的文章的朋友,我的文章能够给你帮助. 在前面的两篇相关的文章里面,实现InfoWindow是通过di ...

  3. lzugis——Arcgis Server for JavaScript API之自己定义InfoWindow

    用过Arcgis Server for JavaScript API肯定知道InfoWIndow.你在用InfoWindow的时候会发现各种问题,比如不能全然显示的问题,遮盖对象的问题等等.所以呢我在 ...

  4. lzugis——Arcgis Server for JavaScript API之POI

    POI(Point Of Interest),感兴趣点,其实呢,严格意义上说应该不是POI,但是单位就这样叫了,我也就这样叫了,其实现的功能大致是这样的:用过百度地图的朋友们都知道你在百度地图时,当鼠 ...

  5. lzugis——Arcgis Server for JavaScript API在自己的定义InfoWindow

    你看到这个标题嫌烦.因为我最近一直与研究问题,相关文章使这些也可以只,同时要读我文章的朋友.我的文章能够给你带来帮助. 在相关的内部的前两篇文章,达到InfoWindow经div实现的东西,成Info ...

  6. ArcGIS server开发之API for js 本地部署

    ArcGIS Server for javascript 本地部署 第一次使用arcgis server for js开发,在经验方面还有很多的不足,所以将自己在开发过程中遇到的问题写出来与大家共享. ...

  7. ArcGIS 10.2 JavaScript API本地部署离线开发环境

    1 获取ArcGIS JavaScript API API的下载地址http://support.esrichina.com.cn/2011/0223/960.html,在下载页面会看到api和sdk ...

  8. ArcGIS Server for JavaScript 3.3 的安装部署

    一.安装包下载 首先从官网下载ArcGIS API for JavaScript 3.3 的API和SDK,地址:http://support.esrichina.com.cn/2011/0223/9 ...

  9. How to CORS enable ArcGIS Server 10.2.1 to Access REST Services without Using proxy.ashx

    http://gis.stackexchange.com/questions/86206/how-to-cors-enable-arcgis-server-10-2-1-to-access-rest- ...

随机推荐

  1. UVALive 6911 F - Double Swords

    思路:1.把所有有长度的剑看做点.Ai点是肯定要取.然后求另一把剑. 先对右区间排个序,然后每次看这个区间范围内有没有剑,如果没有就添加一把(值为右端点的剑): 如果有并且数量为1且这条龙的Ai等这把 ...

  2. SDWebImage 加载Https自签名证书时的图片问题

    你是否遇到了这种情况,好不容易把自签名HTTPS证书配置好了,访问https接口也成功了,但是图片加载不出来? 传了SDWebImageAllowInvalidSSLCertificates 还是没效 ...

  3. 手动创建sql数据表

    createtable  tb (    ID   int IDENTITY (1,1)     notnull, --创建列ID,并且每次新增一条记录就会加1    WokNo            ...

  4. 数字图像处理,图像锐化算法的C++实现

    http://blog.csdn.net/ebowtang/article/details/38961399 之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度 ...

  5. Qt5.5.1移植到freescale imx6

    一.环境 HOST:ubuntu12.04-LTS Embedded:freescale imx6 linux-3.0.35 CROSS_COMPILE:freescale提供的gcc-4.6.2-g ...

  6. 新机git及github sshkey简单配置

    新机git简单配置,毕竟不常用,不用每次都查1.安装gitwindows:https://git-scm.com/download/winubuntu: apt install git 2.全局配置 ...

  7. 智能指针 auto_ptr、scoped_ptr、shared_ptr、weak_ptr

    什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义 ...

  8. Gentoo系统安装步骤详解

    下载镜像 一般我都是用国内的镜像源,不管是centos,ubuntu还是gentoo在国内的镜像来说肯定比国外快 #下载地址mirrors.163.com/gentoo/#我用的x86的http:// ...

  9. NO.4 Android开发中常用框架及工具

    android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新ListView.ViewPager.WevView.ExpandableListView.GridView ...

  10. 使用mysqldump迁移数据

    1. 先停止业务,使用MySQLdump的数据导出工具,将您线下原有数据库数据导出为数据文件 mysqldump -hlocalhost -uroot --default-character-set= ...