描述:
此示例显示了如何显示一个地图Dojo Dialog 和TooltipDialog的部件。TooltipDialog弹出一个窗口,看起来像一个工具提示。在此示例中,TooltipDialog你点击一个链接时,会显示。再次点击该链接,隐藏TooltipDialog。在这个片断中,我们使用dijit.popup.open打开提示对话框。
dijit.popup.open({ popup: tooltipDialog, around: node });
该示例还显示一个地图在dojo Dialog,在该片段中一个新的地图格的内容创建和设置新的dojo Dialog
dialogBox = new dijit.Dialog({
title: "My Map",
content: htmlFragment,
autofocus: !dojo.isIE,
refocus: !dojo.isIE
});
查看原文:http://www.ibloger.net/article/378.html
在线引用:http://help.arcgis.com/en/webapi/javascript/arcgis/help/jssamples_start.htm
ArcGIS For JavaScript API :http://help.arcgis.com/en/webapi/javascript/arcgis/index.html
在线演示:http://help.arcgis.com/en/webapi/javascript/arcgis/samples/map_dialog/index.html
ojo在线帮助API:http://dojotoolkit.org/api/
代码分析:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
<!--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>Map地图</title>
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/claro/claro.css">
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css" />
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.2"></script>
<style type="text/css">
a {
color: blue;
}
</style>
<script type="text/javascript">
// 导入包,及两个dojo的必要回话组件
dojo.require("esri.map");
dojo.require("dijit.Dialog");
dojo.require("dijit.TooltipDialog");
dojo.require("dijit.Tooltip");
var dialogBox, tooltipDialog; // 一个窗口回话对象,一个提示回话对象
/*********
* Dialog
*********/
function showMapInDialog() {
if (!dialogBox) {
var htmlFragment = '<div>在地图上点击.</div>';
htmlFragment += '<div id="mapOne" style="width:500px; height:400px; border: 1px solid #A8A8A8;"></div>';
// 创建会话
dialogBox = new dijit.Dialog({
title: "我的地图", // 标题
content: htmlFragment, // 内容
draggable:true, // 是否可以在标题上拖动对话框,默认:true
autofocus: !dojo.isIE, // 自动对焦,默认:true。 注意: 当焦点放在IE浏览器,重新打开回话时会导致错误
loadingMessage:"加载中...", // 加载时的文字
errorMessage:"加载失败", // 如果发生错误的消息显示,默认""
refocus: !dojo.isIE, // 重调焦距
});
// 调用show()方法,显示回话
dialogBox.show();
// 调用函数来创建第一个地图
createMap("mapOne");
} else {
dialogBox.show();
}
}
/****************
* TooltipDialog
****************/
function showMapInTooltipDialog(node) {
if (!tooltipDialog) {
var htmlFragment = '<div>在地图上点击.</div>';
htmlFragment += '<div id="mapTwo" style="width:350px; height:350px; border: 1px solid #A8A8A8;"></div>';
// 创建 ToolTip Dialog
tooltipDialog = new dijit.TooltipDialog({
content: htmlFragment, // 内容
autofocus: !dojo.isIE, // 注意: 当焦点放在IE浏览器,重新打开回话时会导致错误
refocus: !dojo.isIE
});
// 点击后,周围元素显示tooltip dialog对话框
dijit.popup.open({ // 弹出的窗口小部件
popup: tooltipDialog, // 弹出的组件
around: node // DOM节点(通常是一个按钮)
});
tooltipDialog.opened_ = true; // 是否被打开的
node.innerHTML = "隐藏"; // 重新设定文字
// 创建地图
createMap("mapTwo");
} else {
if (tooltipDialog.opened_) { // 功能复位代码
dijit.popup.close(tooltipDialog);
tooltipDialog.opened_ = false;
node.innerHTML = "在我下面显示地图";
} else {
dijit.popup.open({
popup: tooltipDialog,
around: node
});
tooltipDialog.opened_ = true;
node.innerHTML = "隐藏";
}
}
}
/**
* 创建地图函数,传入Dom节点id
*/
function createMap(srcNodeRef) {
var map = new esri.Map(
srcNodeRef, // Dom节点id
wrapAround180:true, // 如果为true,支持连续泛跨越日界线,类似与无缝滚动marquee效果
{extent: new esri.geometry.Extent( // 地图范围
-19384354.257963974, // 右上角X横坐标
-12688852.605287973, // 左下角X横坐标
19751404.224035975, // 右上角Y纵坐标
18619754.180311985, // 左下角Y纵坐标
new esri.SpatialReference({ // 空间参考
wkid: 102100
})
),
slider: false, // 是否显示滑块 默认true
nav:true // 平移箭头 默认false
}
);
// 绑定初始化加载事件
dojo.connect(map, "onLoad", function() {
dojo.connect(map, "onMouseOver", map, "reposition");
map.infoWindow.setTitle("位置"); // 设置标题
map.infoWindow.resize(200, 100); // 设置消息窗体大小
});
var markerSymbol = new esri.symbol.SimpleMarkerSymbol( // 标记符号
esri.symbol.SimpleMarkerSymbol.STYLE_X, // 样式,STYLE_CIRCLE(●),STYLE_CROSS(+),STYLE_DIAMOND(◆),STYLE_SQUARE(■),STYLE_X(X)
12, // 像素
new esri.symbol.SimpleLineSymbol( // 线符号
esri.symbol.SimpleLineSymbol.STYLE_SOLID, //样式,STYLE_DASH,STYLE_DASHDOT,STYLE_DASHDOTDOT,STYLE_DOT,STYLE_NULL,STYLE_NULL
new dojo.Color( // 颜色,0.75为透明度
[255,0,0,0.75]
),
4 // 线符号的像素
)
);
var graphic;
// 绑定单击事件
dojo.connect(map, "onClick", function(evt) {
// 在点击的位置添加图形
if (graphic) {
graphic.setGeometry(evt.mapPoint); // 定义几何图,evt.mapPoint是Geometry的子类。
} else {
graphic = new esri.Graphic( // 构建图像
evt.mapPoint, // 当前地图坐标点
markerSymbol // 标记符号
);
map.graphics.add(graphic); // 将图像加入到地图中
}
// 显示信息窗口
var content = "Latitude(纬度) = ${y} <br/> Longitude(经度) = ${x}";
map.infoWindow.setContent( // 设置内容,html或dom元素
esri.substitute( // esri.substitute(data, template?, first?),占位符显示值方法
esri.geometry.webMercatorToGeographic(evt.mapPoint), //从web 墨卡托单位到地理单位间的几何转换
content
)
);
map.infoWindow.show( // 显示窗体
evt.screenPoint, // 屏幕坐标
map.getInfoWindowAnchor(evt.screenPoint) // getInfoWindowAnchor(screenCoords) 在屏幕单位上的定位点。
);
});
// 添加服务层
var tiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer");
map.addLayer(tiledMapServiceLayer);
return map;
}
</script>
</head>
<body class="claro" style="font-family: Arial Unicode MS,Arial,sans-serif;">
<a href="#" οnclick="showMapInDialog();">在对话框中显示地图</a>
<a href="#" οnclick="showMapInTooltipDialog(this);">下面的链接显示地图</a>
</body>
</html>
效果如下: