首页 > 代码库 > arcgis自定义infowindow
arcgis自定义infowindow
1 define([ 2 "dojo/Evented", 3 "dojo/on", 4 "dojo/query", 5 "dojo/_base/declare", 6 "dojo/dom-construct", 7 "dojo/dom-attr", 8 "dojo/_base/array", 9 "dojo/dom-style", 10 "dojo/_base/lang", 11 "dojo/dom-class", 12 "dijit/_TemplatedMixin",/*为了使用我在第一步拷贝下来的HTML模板*/ 13 "esri/domUtils", 14 "esri/InfoWindowBase", 15 "esri/geometry/ScreenPoint", 16 "esri/geometry/screenUtils",/*为了实现地理坐标和屏幕坐标的准确转换*/ 17 "esri/geometry/webMercatorUtils", 18 "dojo/text!./htmlTemplate/BubblePopup.html" 19 ], 20 function (Evented, 21 on, 22 query, 23 declare, 24 domConstruct, 25 domAttr, 26 array, 27 domStyle, 28 lang, 29 domClass, 30 _TemplatedMixin, 31 domUtils, 32 InfoWindowBase, ScreenPoint, screenUtils, webMercatorUtils, template) { 33 var showMapPoint = null; /*是一个全局的变量,用来记录popup的地理坐标位置*/ 34 return declare([InfoWindowBase, Evented, _TemplatedMixin], { 35 36 templateString: template, /*_TemplateMixin模块的一个属性,用来保存HTML模板*/ 37 _events: [], /*是一个数组,用来存储相关的事件,在popup被释放时释放注册的事件*/ 38 constructor: function (parameters) { 39 lang.mixin(this, parameters); 40 }, 41 _createInfoWindowInstance: function (map) { 42 this.domNode = domConstruct.create("div", { id: ‘infoPanel‘ }, map.id + "_root"); 43 this.domNode.innerHTML = ‘<div id="infoHeader"></div><div id="infoContent"><table></table></div>‘; 44 //this.domNode.innerHTML = this.templateString; 45 this._content = query("#infoPanel #infoContent"); 46 this._title = query("#infoPanel #infoHeader"); 47 this._flash = query("#infoPanel .flash"); 48 //hide initial display 49 domUtils.hide(this.domNode); 50 this.isShowing = false; 51 }, 52 setMap: function (map) { 53 this.inherited(arguments);//会调用父类(基类)中的同名方法 54 this._events = []; 55 this._createInfoWindowInstance(map); 56 57 this._events.push(map.on("pan", lang.hitch(this, function (evt) { 58 if (this.isShowing) { 59 this._showInfoWindow(evt.extent); 60 } 61 }))); 62 63 this._events.push(map.on("zoom-start", lang.hitch(this, function (evt) { 64 this.hide(); 65 }))); 66 67 this._events.push(map.on("zoom-end", lang.hitch(this, function (evt) { 68 if (this.isShowing) { 69 this._showInfoWindow(evt.extent); 70 } 71 }))); 72 }, 73 unsetMap: function (map) { 74 this.inherited(arguments); 75 array.forEach(this._events, function (event) { 76 event.remove(); 77 }); 78 }, 79 setTitle: function (title, className) { 80 this._title.forEach(function (node){ 81 node.innerHTML = title; 82 domClass.remove(node); 83 domClass.add(node, className); 84 }); 85 }, 86 setContent: function (content) { 87 this._content.forEach(function (node) { 88 node.innerHTML = content; 89 }); 90 }, 91 _showInfoWindow: function (extent) { 92 if (showMapPoint == null)return; 93 var showScreenPoint = screenUtils.toScreenGeometry(extent, this.map.width, this.map.height, showMapPoint); 94 domStyle.set(this.domNode, { 95 "left": (showScreenPoint.x) + 7 + "px", 96 "top": (showScreenPoint.y) + 7 +"px" 97 }); 98 99 domUtils.show(this.domNode);100 this.isShowing = true;101 this.onShow();102 },103 show: function (location) {104 showMapPoint = location;105 if (webMercatorUtils.canProject(location, this.map)) {106 showMapPoint = webMercatorUtils.project(location, this.map);107 }108 if (showMapPoint.spatialReference) {109 var screenPoint = this.map.toScreen(showMapPoint);110 domStyle.set(this.domNode, {111 "left": (screenPoint.x)+ 7 + "px",112 "top": (screenPoint.y) + 7 + "px"113 });114 }115 //display the info window116 domUtils.show(this.domNode);117 this.isShowing = true;118 this.onShow();119 },120 hide: function () {121 if (this.isShowing) {122 domUtils.hide(this.domNode);123 this.isShowing = false;124 this.onHide();125 }126 },127 resize: function (width, height) {128 domStyle.set(this._content, {129 "width": width + "px",130 "height": height + "px"131 });132 },133 remove: function () {134 this.hide();135 showMapPoint = null;136 },137 destroy: function () {138 domConstruct.destroy(this.domNode);139 }140 });141 });
arcgis自定义infowindow
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。