tencent.html 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  5. <title>地址选择器</title>
  6. <link rel="stylesheet" href="__CDN__/assets/css/bootstrap.min.css"/>
  7. <link rel="stylesheet" href="__CDN__/assets/css/fastadmin.min.css"/>
  8. <link rel="stylesheet" href="__CDN__/assets/libs/font-awesome/css/font-awesome.min.css"/>
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. #container {
  15. position: absolute;
  16. left: 0;
  17. top: 0;
  18. right: 0;
  19. bottom: 0;
  20. }
  21. .confirm {
  22. position: absolute;
  23. bottom: 30px;
  24. right: 4%;
  25. z-index: 99;
  26. height: 50px;
  27. width: 50px;
  28. line-height: 50px;
  29. font-size: 15px;
  30. text-align: center;
  31. background-color: white;
  32. background: #1ABC9C;
  33. color: white;
  34. border: none;
  35. cursor: pointer;
  36. border-radius: 50%;
  37. }
  38. .search {
  39. position: absolute;
  40. width: 400px;
  41. top: 0;
  42. left: 50%;
  43. padding: 5px;
  44. margin-left: -200px;
  45. }
  46. </style>
  47. </head>
  48. <body>
  49. <div class="search">
  50. <div class="input-group">
  51. <input type="text" id="place" name="q" class="form-control" placeholder="输入地点"/>
  52. <span class="input-group-btn">
  53. <button type="submit" name="search" id="search-btn" class="btn btn-success">
  54. <i class="fa fa-search"></i>
  55. </button>
  56. </span>
  57. </div>
  58. </div>
  59. <div class="confirm">确定</div>
  60. <div id="container"></div>
  61. <script charset="utf-8" src="//map.qq.com/api/js?v=2.exp&libraries=place&key={$config.tencentkey|default=''}"></script>
  62. <script src="__CDN__/assets/libs/jquery/dist/jquery.min.js"></script>
  63. <script type="text/javascript">
  64. $(function () {
  65. var map, marker, geocoder, infoWin, searchService, address = null;
  66. var init = function () {
  67. var center = new qq.maps.LatLng({$lat}, {$lng});
  68. map = new qq.maps.Map(document.getElementById('container'), {
  69. center: center,
  70. zoom: parseInt("{$config.zoom}")
  71. });
  72. //初始化marker
  73. initmarker(center);
  74. //实例化信息窗口
  75. infoWin = new qq.maps.InfoWindow({
  76. map: map
  77. });
  78. geocoder = new qq.maps.Geocoder({
  79. complete: function (result) {
  80. infoWin.open();
  81. address = result.detail.addressComponents.province +
  82. result.detail.addressComponents.city +
  83. result.detail.addressComponents.district;
  84. if (result.detail.addressComponents.streetNumber == '') {
  85. address += result.detail.addressComponents.street;
  86. } else {
  87. address += result.detail.addressComponents.streetNumber;
  88. }
  89. infoWin.setContent(address);
  90. infoWin.setPosition(result.detail.location);
  91. }
  92. });
  93. //显示当前marker的位置信息窗口
  94. geocoder.getAddress(center);
  95. var latlngBounds = new qq.maps.LatLngBounds();
  96. //查询poi类信息
  97. searchService = new qq.maps.SearchService({
  98. complete: function (results) {
  99. var pois = results.detail.pois;
  100. for (var i = 0, l = pois.length; i < l; i++) {
  101. var poi = pois[i];
  102. latlngBounds.extend(poi.latLng);
  103. initmarker(poi.latLng);
  104. //显示当前marker的位置信息窗口
  105. geocoder.getAddress(poi.latLng);
  106. }
  107. map.fitBounds(latlngBounds);
  108. }
  109. });
  110. //实例化自动完成
  111. var ap = new qq.maps.place.Autocomplete(document.getElementById('place'));
  112. //添加监听事件
  113. qq.maps.event.addListener(ap, "confirm", function (res) {
  114. searchKeyword();
  115. });
  116. qq.maps.event.addListener(
  117. map,
  118. 'click',
  119. function (event) {
  120. try {
  121. infoWin.setContent('<div style="text-align:center;white-space:nowrap;margin:10px;">加载中</div>');
  122. var latLng = event.latLng,
  123. lat = latLng.getLat().toFixed(5),
  124. lng = latLng.getLng().toFixed(5);
  125. var location = new qq.maps.LatLng(lat, lng);
  126. //调用获取位置方法
  127. geocoder.getAddress(location);
  128. infoWin.setPosition(location);
  129. marker.setPosition(location);
  130. } catch (e) {
  131. console.log(e);
  132. }
  133. }
  134. );
  135. };
  136. //实例化marker和监听拖拽结束事件
  137. var initmarker = function (latLng) {
  138. marker = new qq.maps.Marker({
  139. map: map,
  140. position: latLng,
  141. draggable: true,
  142. title: '拖动图标选择位置'
  143. });
  144. //监听拖拽结束
  145. qq.maps.event.addListener(marker, 'dragend', function (event) {
  146. var latLng = event.latLng,
  147. lat = latLng.getLat().toFixed(5),
  148. lng = latLng.getLng().toFixed(5);
  149. var location = new qq.maps.LatLng(lat, lng);
  150. //调用获取位置方法
  151. geocoder.getAddress(location);
  152. });
  153. };
  154. var close = function (data) {
  155. var index = parent.Layer.getFrameIndex(window.name);
  156. var callback = parent.$("#layui-layer" + index).data("callback");
  157. //再执行关闭
  158. parent.Layer.close(index);
  159. //再调用回传函数
  160. if (typeof callback === 'function') {
  161. callback.call(undefined, data);
  162. }
  163. };
  164. //执行搜索方法
  165. var searchKeyword = function () {
  166. searchService.clear();//先清除
  167. marker.setMap(null);
  168. infoWin.close();
  169. var keyword = $("#place").val();
  170. searchService.setLocation("{$location}");//设置默认检索范围(默认为全国),类型可以是坐标或指定的城市名称。
  171. searchService.setPageIndex(0);//设置检索的特定页数。
  172. searchService.setPageCapacity(1);//设置每页返回的结果数量。
  173. searchService.search(keyword);//开始查询
  174. };
  175. //点击确定后执行回调赋值
  176. $(document).on('click', '.confirm', function () {
  177. var as = marker.getPosition();
  178. var x = as.getLat().toFixed(5);
  179. var y = as.getLng().toFixed(5);
  180. var zoom = map.getZoom();
  181. var data = {lat: x, lng: y, zoom: zoom, address: address};
  182. close(data);
  183. });
  184. //点击搜索按钮
  185. $(document).on('click', '#search-btn', function () {
  186. if ($("#place").val() == '')
  187. return;
  188. searchKeyword();
  189. });
  190. init();
  191. });
  192. </script>
  193. </body>
  194. </html>