You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vue-shop-admin-work/public2/ueditor/dialogs/gmap/gmap.html

136 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-- 这是 HTML 4.01 过渡型的文档类型声明,告知浏览器按照 HTML 4.01 过渡型标准来解析页面内容,并指定对应的 DTD文档类型定义文件的 URL -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- 通过 HTTP 头部等价属性http-equiv设置页面的内容类型为 HTML 文本格式,字符编码为 UTF-8确保页面能够正确显示各种字符 -->
<title></title>
<!-- 页面的标题元素,此处为空,通常会设置一个有意义的标题显示在浏览器的标题栏等相关位置 -->
<script type="text/javascript" src="../internal.js"></script>
<!-- 引入相对路径为 '../internal.js' 的 JavaScript 文件,该文件可能包含了页面中会用到的自定义函数、变量以及业务逻辑等代码,具体功能依赖其内部定义 -->
<style type="text/css">
.content {
width: 530px;
height: 350px;
margin: 10px auto;
}
/* 定义类名为 'content' 的元素样式,设置宽度为 530 像素,高度为 350 像素,并且在水平方向上自动居中(通过 margin: 10px auto 实现),可能作为页面主体内容的一个容器样式 */
.content table {
width: 100%
}
/* 当类名为 'content' 的元素内部包含 table 表格时,设置表格宽度占满父元素(也就是类名为 'content' 的元素)的宽度,使其自适应父元素宽度 */
.content table td {
vertical-align: middle;
}
/* 对于类名为 'content' 的元素内部表格的单元格td设置垂直对齐方式为居中使单元格内的内容在垂直方向上居中显示 */
#address {
width: 220px;
height: 21px;
background: #FFF;
border: 1px solid #d7d7d7;
line-height: 21px;
}
/* 定义 id 为 'address' 的元素样式,设置宽度为 220 像素,高度为 21 像素,背景颜色为白色(#FFF边框为 1 像素宽的灰色(#d7d7d7实线并且行高设置为与元素高度相同21 像素),可能用于输入框等文本输入元素的样式设置 */
</style>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<!-- 引入 Google Maps API 的 JavaScript 文件,用于在页面中实现地图相关的功能,通过设置 sensor=false 表示不使用传感器(比如设备的地理位置传感器等),具体根据应用场景决定是否需要获取设备位置信息 -->
</head>
<body>
<div class="content">
<!-- 创建一个类名为 'content' 的 div 容器,应用上面定义的 '.content' 样式类,作为页面中主要内容的包裹容器,里面放置与地图搜索和展示相关的元素 -->
<table>
<tr>
<td><label for="address"><var id="lang_input_address"></var></label></td>
<td><input id="address" type="text" /></td>
<td><a id="doSearch" href="javascript:void(0)" class="button"><var id="lang_input_search"></var></a></td>
</tr>
</table>
<!-- 创建一个表格结构,第一列通过 label 标签关联到后面的文本输入框input 元素id 为 'address'),用于显示一个提示文本(<var id="lang_input_address"></var> 中的文本可能通过 JavaScript 动态设置大概是与输入地址相关的提示语第二列是用于输入地址信息的文本输入框第三列是一个链接a 元素id 为 'doSearch',应用 'button' 类样式,显示的文本同样通过 <var id="lang_input_search"></var> 动态设置,大概是与搜索操作相关的按钮文本),整体构成一个简单的地图地址搜索表单 -->
<div id="container" style="width: 100%; height: 340px;margin: 5px auto; border: 1px solid gray;"></div>
<!-- 创建一个 id 为 'container' 的 div 容器,设置宽度占满父元素(也就是类名为 'content' 的元素)的宽度,高度为 340 像素,在水平方向上自动居中(通过 margin: 5px auto 实现),并且有 1 像素宽的灰色边框,该容器用于后续放置 Google 地图展示相关的内容 -->
</div>
<script type="text/javascript">
domUtils.on(window, "load", function () {
// 使用 domUtils可能是自定义的 DOM 操作工具函数库中的方法)为 window 对象绑定 'load' 事件监听器,当页面加载完成后执行以下匿名函数,用于初始化地图相关的各种功能和操作绑定
var map = new google.maps.Map(document.getElementById('container'), {
zoom: 3,
streetViewControl: false,
scaleControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
// 创建一个 Google Maps 的地图实例map将其渲染到页面中 id 为 'container' 的元素内,设置初始缩放级别为 3禁用街景视图控制streetViewControl: false启用比例尺控制scaleControl: true地图类型为普通道路地图mapTypeId: google.maps.MapTypeId.ROADMAP
var imgcss;
// 定义一个变量 imgcss用于存储图片的样式信息初始值为空后续可能会根据获取到的已有图片样式进行赋值
var marker = new google.maps.Marker({
map: map,
draggable: true
});
// 创建一个 Google Maps 的标记marker实例将其添加到刚才创建的地图map并且设置该标记是可拖动的draggable: true可用于在地图上标记特定位置
function doSearch() {
var address = document.getElementById('address').value;
// 获取页面中 id 为 'address' 的文本输入框内输入的地址文本内容
var geocoder = new google.maps.Geocoder();
// 创建一个 Google Maps 的地理编码服务对象geocoder用于将地址文本转换为地理坐标等相关信息
geocoder.geocode({ 'address': address }, function (results, status) {
// 使用地理编码服务对象的 geocode 方法传入要查询的地址信息该方法是异步的查询完成后会执行回调函数回调函数接收查询结果results和状态码status两个参数
if (status == google.maps.GeocoderStatus.OK) {
var bounds = results[0].geometry.viewport;
// 如果查询状态码为 'OK'表示查询成功从查询结果的第一个元素results[0]中获取地理边界信息geometry.viewport用于后续调整地图显示范围
map.fitBounds(bounds);
// 根据获取到的地理边界信息调整地图的显示范围,使地图能够完整显示该地址所在的区域
marker.setPosition(results[0].geometry.location);
// 将标记的位置设置为查询结果中该地址对应的地理坐标位置geometry.location
marker.setTitle(address);
// 为标记设置标题为输入的地址文本内容,可能在鼠标悬停等交互场景下显示该标题作为提示信息
} else alert(lang.searchError);
// 如果查询状态码不是 'OK'表示查询出现错误弹出一个提示框alert显示错误信息lang.searchError这里的 lang 可能是一个包含多语言文本的对象,通过相应的键获取对应的错误提示文本,具体看代码其他部分的定义)
});
}
$G('address').onkeydown = function (evt) {
evt = evt || event;
if (evt.keyCode == 13) {
doSearch();
}
};
// 使用 $G 函数(可能是自定义的获取 DOM 元素的函数)获取页面中 id 为 'address' 的元素,并为其绑定 'keydown' 键盘按下事件监听器当按下回车键keyCode == 13调用 doSearch 函数执行地址搜索操作,方便用户通过键盘直接进行搜索,无需点击搜索按钮
$G("doSearch").onclick = doSearch;
// 使用 $G 函数获取页面中 id 为 'doSearch' 的元素(也就是搜索按钮),并为其绑定 'click' 事件监听器,点击按钮时调用 doSearch 函数执行地址搜索操作
dialog.onok = function () {
var center = map.getCenter();
var point = marker.getPosition();
// 获取地图当前的中心坐标center以及标记所在的位置坐标point用于构建静态地图的 URL 参数
var url = "http://maps.googleapis.com/maps/api/staticmap?center=" + center.lat() + ',' + center.lng() + "&zoom=" + map.zoom + "&size=520x340&maptype=" + map.getMapTypeId() + "&markers=" + point.lat() + ',' + point.lng() + "&sensor=false";
// 构建一个 Google Maps 静态地图的 URL包含地图的中心坐标、缩放级别、尺寸宽 520 像素,高 340 像素、地图类型以及标记位置等参数并且设置不使用传感器sensor=false用于获取一张静态的地图图片资源
editor.execCommand('inserthtml', '<img width="520" height="340" src="' + url + '"' + (imgcss ? ' style="' + imgcss + '"' : '') + '/>');
// 使用编辑器editor可能是自定义的富文本编辑器对象的命令execCommand插入一段 HTML 代码,即创建一个宽度为 520 像素,高度为 340 像素的 img 图片元素,其 src 属性指向刚才构建的静态地图 URL并且如果 imgcss 变量有值(即存在图片样式信息),则添加相应的 style 属性设置图片样式,将静态地图图片插入到编辑器内容中
};
function getPars(str, par) {
var reg = new RegExp(par + "=((\\d+|[.,])*)", "g");
return reg.exec(str)[1];
}
// 定义一个函数 getPars用于从给定的字符串str中通过正则表达式RegExp匹配获取指定参数par的值正则表达式的模式是匹配以参数名开头后面跟着等号和对应的值值可以是数字、小数点或者逗号组成的字符串并返回匹配到的参数值
var img = editor.selection.getRange().getClosedNode();
if (img && img.src.indexOf("http://maps.googleapis.com/maps/api/staticmap") != -1) {
var url = img.getAttribute("src");
var centers = getPars(url, "center").split(",");
point = new google.maps.LatLng(Number(centers[0]), Number(centers[1]));
map.setCenter(point);
map.setZoom(Number(getPars(url, "zoom")));
centers = getPars(url, "markers").split(",");
marker.setPosition(new google.maps.LatLng(Number(centers[0]), Number(centers[1])));
imgcss = img.style.cssText;
} else {
setTimeout(function () {
doSearch();
}, 30)
}
// 获取编辑器当前选区范围editor.selection.getRange()内的闭合节点getClosedNode(),可能是获取选区对应的 HTML 元素节点判断如果该节点存在img并且其 src 属性中包含 Google Maps 静态地图的 URL 字符串,则表示当前是在编辑已有的静态地图相关内容,执行以下操作:
// 从该节点的 src 属性获取 URL 字符串img.getAttribute("src")),通过 getPars 函数分别获取地图的中心坐标、缩放级别以及标记位置等参数信息然后根据这些信息设置地图map的中心坐标、缩放级别以及标记marker的位置并且获取该节点的样式信息img.style.cssText赋值给 imgcss 变量,用于后续保存或应用该图片的样式;
// 如果获取的节点不存在或者不是 Google Maps 静态地图相关的节点,则设置一个定时器,延迟 30 毫秒后调用 doSearch 函数执行地址搜索操作,可能是在初次加载页面或者新建相关内容时的默认操作,引导用户输入地址进行地图查询和展示。
});
</script>
</body>
</html>