__uniappchooselocation.html 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <script>
  6. var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
  7. document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
  8. </script>
  9. <title></title>
  10. <style>
  11. html,
  12. body {
  13. margin: 0;
  14. padding: 0;
  15. position: absolute;
  16. left: 0;
  17. top: 0;
  18. right: 0;
  19. bottom: 0;
  20. background: #ffffff;
  21. }
  22. *{
  23. margin:0;
  24. padding:0;
  25. }
  26. button,
  27. input,
  28. input[type=button],
  29. input[type=reset],
  30. input[type=search],
  31. input[type=submit],
  32. select {
  33. outline: none;
  34. -webkit-tap-highlight-color: transparent;
  35. -webkit-appearance: none;
  36. font-family: inherit;
  37. border: none;
  38. }
  39. .hide {
  40. display: none;
  41. }
  42. .search-wrap {
  43. position: absolute;
  44. left: 0;
  45. right: 0;
  46. top: 0;
  47. padding: 8px 60px 8px 15px;
  48. background-color: #fff;
  49. border-bottom: 1px solid #d3d3d3;
  50. z-index: 100;
  51. }
  52. .search-wrap.init-status {
  53. padding-right: 15px;
  54. }
  55. .search-wrap .search-bar {
  56. display: block;
  57. height: 30px;
  58. background-color: #ebebeb;
  59. padding-left: 10px;
  60. padding-right: 10px;
  61. color: #b4b4b4;
  62. font-size: 15px;
  63. line-height: 31px;
  64. border-radius: 5px;
  65. overflow: hidden;
  66. white-space: nowrap;
  67. text-overflow: ellipsis;
  68. }
  69. .search-wrap .cancel,
  70. .search-wrap .submit {
  71. position: absolute;
  72. top: 0;
  73. right: 0;
  74. width: 55px;
  75. height: 46px;
  76. line-height: 46px;
  77. text-align: center;
  78. font-size: 16px;
  79. color: #0079ff;
  80. background-color: #fff;
  81. }
  82. .search-wrap .clear-input {
  83. top: 11px;
  84. right: 60px;
  85. width: 34px;
  86. height: 26px;
  87. line-height: 26px;
  88. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAPFBMVEUAAACZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZlr8OySAAAAE3RSTlMANO/H574Jw5g/soF2LxKbQCgmvcJ4rgAAAKFJREFUOMu9k1sSgyAMRcNLwbfe/e+1HZLa0DKTP8+PztwTDRDoWa4lRSCm5erGZcTNWP7iIaMhD22+BfwQtqae89bQ39jRYVf9ocu3U+5/cp4D7yZeCwkrKo7Y8O8XVFYRZilkgx+VWYQEZagcSYQIZagcUQRAGZwLpmD+wmzSXKa5UdZWW4d10E1Gh2wPjD1y9tBqSlDlB/U4PxfnpEd5AeZAIGebfob2AAAAAElFTkSuQmCC) no-repeat center center;
  89. background-color: #ededed;
  90. background-size: 18px 18px;
  91. position: absolute;
  92. padding: 0;
  93. border: 0;
  94. font-size: 14px;
  95. border-radius: 4px;
  96. text-align: center;
  97. z-index: 2;
  98. }
  99. .search-wrap.init-status .cancel,
  100. .search-wrap.init-status .clear-input,
  101. .search-wrap.init-status .submit {
  102. display: none;
  103. }
  104. .search-wrap .search-bar .keyword {
  105. display: block;
  106. width: 100%;
  107. padding-top: 6px;
  108. padding-bottom: 6px;
  109. border: 0;
  110. font-size: 14px;
  111. line-height: 18px;
  112. background: 0 0;
  113. }
  114. .search-wrap.init-status .search-bar .keyword {
  115. text-align: left;
  116. }
  117. .search-wrap .search-bar .keyword::-webkit-input-placeholder {
  118. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAAgCAMAAACioYPHAAAAaVBMVEUAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxWbJ4AAAAInRSTlMAv39AEB/f758wYFDQj3CvDPflh9qpJBYEyEc3sn1om1t4LqRQpwAABAhJREFUWMPtlumS0zAQhD26TzvXsiwsC/T7PySK5Fi+Q2Cpoij6R2w5lvSpPTNS86+Jc1kbLbfrb7WxXT4U44Y1jK/1tI3cmPnwzYTT6dK1chcQCLVB2ABk8GtdXW1IKLHWk9Ct452PuOlJ7gLexk1shGYLcGFPfbujLs0Aut+z6vMJuJw/2Q+8JeD4tg0YyizCE0gQGs+TvCjIRIZlEW43RAvAmJx8ENAfofwQBQScNwEJZQ4gdDI1kNXHJ6AoSyFQFoAFYGLYAzTspki29++I10NT9QVo9wEZ2r4h82XPh0cBAw3qRzkovH6cJiFg7wDy2vgtQPsTPc9Qh9mjJ7yswUXGFBgzloEvHYyR3USjD2XcNWn7lLJyBCi8UbgPeNDLmvB8XLMARKRBpDhDEl2npBqDBLpJ0aAAluftxQZARYDSPwH4DZcly1d8vRODnPtrw3LOw/xLO7Ba2fM9d9fXeLpcO7MYAN21dtSnMzPvzS1IzVrOfoJ6IAZngBHKiTFg7So86xSArgVNF0WYqu4IL2tV/wAcfhFQ0A3JRzEHtABULgFLwEVA9TdqNWM15CZgmzwKVAKyXIpxlKm04gU0Ako2kvExQvR5dX8SUBJc7NhVCv12MbzLCZ0ocahB/m6ZIboPGPBpyfEREBuAWrdbg0qNKkoY7wL4hO8rmzNOq3xOwyRyMR1UDL7TtRZ6pqFcalr/HoBva0X5jKflQ9kqACspx6ZHRsp4+TX3DoDPwOe94l35rigB2UimFe/loEfRIJzKeKUR4OaAYgwoQJtlpv5l8PJxYeBleFQVOjks1NfqUddiXQdow3nLskwA3ATQEauAjnQ1P4BPVSuxPOI8L9Np0qXEtBqXV1qYuoFUBUrqGNPaVsCogbYCCmgzmE803/QSex34y4TvuIzAZahQntohDHNIYi3ndrKj8v5oL/yVrnOi/zMbZJsdCTY5AL7KevoHcPpwF1AE7ZrY81Wx7sZgcyw6eUVXAEIrapJIxqYVIBdNx/NWFEvkmTrq2xFH458THT9rwIRKuASshAhzPkmA6Rm8wlDBg4py/cBCUZSYprSkkjkKmTOMj82WkHTUSLr45jkTbgPWmHPTk66GkQODYEMFkmOPx50kIPocyb+2hEVm0pOVfI4XJJ2efMrfQrgP6Agwk/3MKSg+MclWE6ssgpc9nlMwJdW6UcYZuOKqFtP9TcrDcGS9rBIKjTywT2ggmZ1X0dsCgyhmX1EQ9CIVIkYikZkLioQuF9XUMNyQvEDNFs+INFQOkiRTGFwAyjix2Cc6otHHMWZlbM+yPOclxYd9QYGXTrIsTza7hGFmH6BMqSKdq+bbGMo0ohqUUvkR8VtJ8fKBXvJly2Cx3882//UX6QfMclqph21gcgAAAABJRU5ErkJggg==);
  119. background-repeat: no-repeat;
  120. background-position: left center;
  121. background-size: 80px 16px;
  122. color: gray
  123. }
  124. .search-wrap.init-status .search-bar .keyword::-webkit-input-placeholder {
  125. background-position: center center;
  126. }
  127. .suggestion-wrap {
  128. position: absolute;
  129. top: 46px;
  130. bottom: 0;
  131. z-index: 7;
  132. width: 100%;
  133. background: #f6f6f6;
  134. overflow: scroll;
  135. -webkit-overflow-scrolling: touch;
  136. }
  137. .map-wrap {
  138. height: 45%;
  139. position: relative;
  140. top: 46px;
  141. width: 100%;
  142. }
  143. .list-wrap {
  144. width: 100%;
  145. position: absolute;
  146. background-color: #fff;
  147. z-index: 1;
  148. bottom: 0;
  149. left: 0;
  150. overflow: hidden;
  151. border-top: 1px solid #d3d3d3;
  152. overflow-y: scroll;
  153. padding-bottom: 0;
  154. padding-bottom: constant(safe-area-inset-bottom);
  155. padding-bottom: env(safe-area-inset-bottom);
  156. -webkit-overflow-scrolling: touch;
  157. }
  158. .poi-list ul {
  159. list-style: none;
  160. width: 100%;
  161. text-align: left;
  162. padding: 0 0 65px;
  163. }
  164. .suggestion-wrap li,
  165. .active-pos,
  166. .poi-list li{
  167. position: relative;
  168. display: block;
  169. padding-left: 15px;
  170. border: none;
  171. height: 58px;
  172. padding-top: 6px;
  173. margin: 0;
  174. }
  175. .poi-list li * {
  176. pointer-events: none;
  177. }
  178. .poi-list li p,
  179. .active-pos div p {
  180. padding-bottom: 10px;
  181. border-bottom: 1px solid #d3d3d3;
  182. }
  183. .poi-title {
  184. font-size: 14px;
  185. line-height: 27px;
  186. color: #333;
  187. font-weight: 400;
  188. display: block;
  189. width: 92%;
  190. text-overflow: ellipsis;
  191. white-space: nowrap;
  192. overflow: hidden;
  193. }
  194. .poi-address {
  195. font-size: 12px;
  196. color: gray;
  197. height: 20px;
  198. line-height: 20px;
  199. margin: 0;
  200. width: 92%;
  201. text-overflow: ellipsis;
  202. white-space: nowrap;
  203. overflow: hidden;
  204. display: block;
  205. }
  206. .poi-city,
  207. .poi-latlng {
  208. line-height: 22px;
  209. display: none;
  210. }
  211. .no-more-results,
  212. .no-results {
  213. color: gray;
  214. padding: 20px 0;
  215. line-height: 24px;
  216. text-align: center;
  217. }
  218. .no-more-results p,
  219. .no-results p {
  220. padding: 0;
  221. margin: 0;
  222. }
  223. .list-wrap i {
  224. width: 16px;
  225. height: 16px;
  226. display: none;
  227. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAaVBMVEUAAAAAef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef8Aef84EEEWAAAAInRSTlMA+QQY6izG8NO6TphC3JReWSMoDLOfgXajf29lZEs7Hcep1l5DEAAAAPxJREFUOMuFU9cSgyAQBDSUgCVgSS/8/0cGc8E5FQdeOGaXud0rBB9mzdFYRtKnGDkVkktB+VgkYE27poCw6aheUxpxPqHn6SyaRe66NKsfpqyRll6+Njlfsp/jS1WkRFeXf/QUh6Stg3iCAHndMX6VPxltlaiMNdPXqp1iftviR+qHcN34ZJm6FO4/4XY0FOeuknhpp0jdCamHJA7GhjqQ2n2ctCpofPw8K+22OHm8I+HjvXIYj4SYYvSBwTAeU0SROjA6hnEQCTYjg2McbEKhZgbGoVC41HqJQ6lxs1iP8blZuN3WrdudG5jcyGWHNj/2+cXJr15+ebPr/wWbNBG/n/A0GgAAAABJRU5ErkJggg==) no-repeat right center;
  228. background-size: 16px 16px;
  229. position: absolute;
  230. right: 15px;
  231. top: 50%;
  232. margin-top: -8px;
  233. }
  234. .list-wrap i.active {
  235. right: 30px;
  236. display: inline-block;
  237. }
  238. </style>
  239. </head>
  240. <body>
  241. <div class="search-wrap init-status">
  242. <div class="search-bar">
  243. <form name="poi-search" id="poiSearch" onsubmit="return false;">
  244. <input type="search" class="keyword" id="searchword" placeholder=" ">
  245. <button type="reset" class="clear-input hide"></button>
  246. <button type="submit" class="submit hide">搜索</button>
  247. </form>
  248. <a class="cancel">取消</a>
  249. </div>
  250. </div>
  251. <div class="suggestion-wrap hide">
  252. <div class="poi-list">
  253. <ul>
  254. </ul>
  255. </div>
  256. <div class="no-results hide">
  257. <p>对不起,没有搜索到相关数据!</p>
  258. </div>
  259. <div class="no-more-results hide">
  260. <p>亲,没有更多了~</p>
  261. </div>
  262. </div>
  263. <div id="map" class="map-wrap"></div>
  264. <div class="list-wrap">
  265. <div class="active-pos">
  266. </div>
  267. <div class="poi-list">
  268. <ul>
  269. </ul>
  270. <div class="no-results hide">
  271. <p>对不起,没有搜索到相关数据!</p>
  272. </div>
  273. </div>
  274. </div>
  275. <script>
  276. var loc;
  277. var serviceWebview;
  278. var back = function(cancel) {
  279. if (cancel) {
  280. plus.webview.postMessageToUniNView({
  281. type: 'chooseLocation',
  282. args: {
  283. errMsg: 'cancel'
  284. }
  285. }, '__uniapp__service');
  286. }
  287. var webview = plus.webview.currentWebview()
  288. if (webview.__uniapp_statusbar_style === 'dark') {
  289. plus.navigator.setStatusBarStyle('dark')
  290. }
  291. webview.close('auto');
  292. };
  293. window.__chooseLocationConfirm__ = function() {
  294. if (!loc) {
  295. plus.nativeUI.alert('您尚未选择位置!');
  296. return;
  297. }
  298. plus.webview.postMessageToUniNView({
  299. type: 'chooseLocation',
  300. args: loc
  301. }, '__uniapp__service');
  302. back();
  303. }
  304. var searchWrapElem = document.querySelector('.search-wrap');
  305. var searchWordElem = document.getElementById('searchword');
  306. var resetElem = document.querySelector('[type="reset"]');
  307. var cancelElem = document.querySelector('.cancel');
  308. var suggestionWrapElem = document.querySelector('.suggestion-wrap');
  309. var mapElem = document.getElementById('map');
  310. var listWrapElem = document.querySelector('.list-wrap');
  311. var suggestionPoiListElem = suggestionWrapElem.querySelector('.poi-list ul');
  312. var suggestionPoiNoResultsElem = suggestionWrapElem.querySelector('.no-results');
  313. var suggestionPoiNoMoreResultsElem = suggestionWrapElem.querySelector(
  314. '.no-more-results');
  315. var activePosElem = document.querySelector('.active-pos');
  316. var nearbyPoiListElem = listWrapElem.querySelector('.poi-list ul');
  317. var nearbyPoiNoResultsElem = listWrapElem.querySelector('.no-results');
  318. listWrapElem.style.top = mapElem.offsetHeight + 47 + 'px';
  319. var debounce = function(func, wait, immediate) {
  320. var timeout, result;
  321. return function() {
  322. var context = this,
  323. args = arguments,
  324. later, callNow;
  325. later = function() {
  326. timeout = null;
  327. if (!immediate) {
  328. result = func.apply(context, args);
  329. }
  330. };
  331. callNow = immediate && !timeout;
  332. clearTimeout(timeout);
  333. timeout = setTimeout(later, wait);
  334. if (callNow) {
  335. result = func.apply(context, args);
  336. }
  337. return result;
  338. };
  339. };
  340. var plusReady = function(callback) {
  341. if (window.plus) {
  342. callback()
  343. } else {
  344. document.addEventListener('plusready', callback)
  345. }
  346. }
  347. var ZOOM = 13
  348. window.__chooseLocation__ = function(params) {
  349. plusReady(function() {
  350. serviceWebview = plus.webview.getWebviewById('__W2A_CONTEXT_') ||
  351. plus.webview
  352. .getLaunchWebview();
  353. plus.key.addEventListener('backbutton', function() {
  354. back(true);
  355. });
  356. var nativeMarker = false;
  357. var nativeMap = new plus.maps.Map('map', {
  358. zoom: ZOOM
  359. });
  360. var centerPoint = false
  361. var reverseGeocode = debounce(function(point) {
  362. plus.maps.Map.reverseGeocode(point, {}, function(res) {
  363. activePosElem.innerHTML =
  364. '<div data-name="' + (res.address || '') +
  365. '" data-address="' + (res.address || '') +
  366. '" data-lat="' + res.coord.getLat() +
  367. '" data-lng="' + res.coord.getLng() +
  368. '"><h2 class="poi-title">地图位置</h2><p><span class="poi-address">' +
  369. (res.address ||
  370. '') +
  371. '</span><span class="poi-latlng">' +
  372. res.coord
  373. .getLat() +
  374. ',' + res.coord.getLng() +
  375. '</span><i></i></p></div>';
  376. }, function(err) {
  377. console.log(err);
  378. });
  379. searchNearbyPoi.poiSearchNearBy('', point, 1000);
  380. }, 10)
  381. nativeMap.getUserLocation(function(state, point) { //获取当前用户坐标
  382. if (state === 0) {
  383. nativeMarker = new plus.maps.Marker(point);
  384. nativeMarker.setIcon('__uniappmarker@3x.png');
  385. nativeMap.addOverlay(nativeMarker);
  386. //centerPoint = point;
  387. nativeMap.showUserLocation(true);
  388. if (plus.os.name !== 'Android') {
  389. nativeMap.setCenter(point);
  390. }
  391. // reverseGeocode(centerPoint);
  392. } else {
  393. console.log('获取用户坐标失败');
  394. }
  395. });
  396. nativeMap.onstatuschanged = function(evt) { //切换坐标中心
  397. // if (!centerPoint) {
  398. // return;
  399. // }
  400. if (centerPoint && evt.center) {
  401. if (centerPoint.latitude === evt.center.latitude &&
  402. centerPoint.longitude === evt.center.longitude) {
  403. return;
  404. }
  405. }
  406. centerPoint = evt.center
  407. if (nativeMarker) {
  408. nativeMarker.setPoint(centerPoint);
  409. }
  410. reverseGeocode(centerPoint);
  411. };
  412. var searchPoi = new plus.maps.Search(nativeMap);
  413. var searchNearbyPoi = new plus.maps.Search(nativeMap);
  414. var showMap = function(centerPoint) {
  415. nativeMap.show();
  416. if (centerPoint) {
  417. if (nativeMarker) {
  418. nativeMarker.setPoint(centerPoint);
  419. }
  420. nativeMap.setCenter(centerPoint);
  421. // setTimeout(function() {
  422. // nativeMap.setZoom(ZOOM);
  423. // }, 150);
  424. // reverseGeocode(centerPoint);
  425. }
  426. searchWordElem.value = '';
  427. cancelElem.className = 'cancel hide';
  428. searchWrapElem.className = 'search-wrap init-status';
  429. suggestionWrapElem.className = 'suggestion-wrap hide';
  430. resetSuggestionPoiList();
  431. }
  432. var resetSuggestionPoiList = function() {
  433. suggestionPoiListElem.innerHTML = '';
  434. suggestionPoiNoResultsElem.className = 'no-results hide';
  435. suggestionPoiNoMoreResultsElem.className =
  436. 'no-more-results hide';
  437. }
  438. var showSuggestionPoiList = function() {
  439. nativeMap.hide();
  440. resetSuggestionPoiList();
  441. }
  442. var showSuggestionPoiNoResults = function() {
  443. suggestionPoiListElem.innerHTML = '';
  444. suggestionPoiNoResultsElem.className = 'no-results';
  445. suggestionPoiNoMoreResultsElem.className =
  446. 'no-more-results hide';
  447. }
  448. var renderPoiResults = function(poiList) {
  449. var html = [];
  450. for (var i = 0; i < poiList.length; i++) {
  451. var poi = poiList[i];
  452. if (poi.point) {
  453. html.push('<li data-name="' + (poi.name || '') +
  454. '" data-address="' + (poi.address || '') +
  455. '" data-lat="' + poi.point.getLat() +
  456. '" data-lng="' + poi.point.getLng() +
  457. '"><p><span class="poi-title">' + poi.name +
  458. '</span><span class="poi-address">' + (poi.address ||
  459. '') +
  460. '</span><span class="poi-latlng">' + poi.point
  461. .getLat() +
  462. ',' + poi.point.getLng() +
  463. '</span><span class="poi-city">' + poi.city +
  464. '</span></p><i></i></li>');
  465. }
  466. }
  467. return html.join('');
  468. }
  469. var showNearbyPoiNoResults = function() {
  470. nearbyPoiListElem.innerHTML = '';
  471. nearbyPoiNoResultsElem.className = 'no-results';
  472. }
  473. var showNearbyPoiResults = function(poiList) {
  474. var html = renderPoiResults(poiList);
  475. if (html) {
  476. nearbyPoiListElem.innerHTML = html;
  477. nearbyPoiNoResultsElem.className = 'no-results hide';
  478. } else {
  479. showNearbyPoiNoResults();
  480. }
  481. }
  482. var showSuggestionPoiResults = function(poiList) {
  483. var html = renderPoiResults(poiList);
  484. if (html) {
  485. suggestionPoiListElem.innerHTML = html;
  486. suggestionPoiNoResultsElem.className =
  487. 'no-results hide';
  488. suggestionPoiNoMoreResultsElem.className =
  489. 'no-more-results';
  490. } else {
  491. showSuggestionPoiNoResults();
  492. }
  493. }
  494. searchPoi.onPoiSearchComplete = function(state, res) {
  495. if (state === 0) {
  496. if (res.poiList.length) {
  497. showSuggestionPoiResults(res.poiList);
  498. } else {
  499. showSuggestionPoiNoResults();
  500. }
  501. } else {
  502. showSuggestionPoiNoResults();
  503. }
  504. };
  505. searchNearbyPoi.onPoiSearchComplete = function(state, res) {
  506. if (state === 0) {
  507. if (res.poiList.length) {
  508. showNearbyPoiResults(res.poiList);
  509. } else {
  510. showNearbyPoiNoResults();
  511. }
  512. } else {
  513. showNearbyPoiNoResults();
  514. }
  515. };
  516. var getSuggestion = debounce(function(q) {
  517. if (q.trim()) {
  518. searchPoi.poiSearchNearBy(q, centerPoint, 50000)
  519. } else {}
  520. }, 10);
  521. suggestionPoiListElem.addEventListener('click', function(evt) {
  522. var target = evt.target;
  523. for (; target && target !== suggestionPoiListElem; target =
  524. target.parentNode) {
  525. if (target && target.tagName === 'LI') {
  526. var laglng = target.querySelector('.poi-latlng')
  527. .innerText
  528. .split(',');
  529. centerPoint = new plus.maps.Point(Number(laglng[1]), Number(laglng[
  530. 0]));
  531. showMap(centerPoint);
  532. reverseGeocode(centerPoint);
  533. break;
  534. }
  535. }
  536. });
  537. searchWordElem.addEventListener('click', function() {
  538. searchWrapElem.className = 'search-wrap';
  539. suggestionWrapElem.className = 'suggestion-wrap';
  540. cancelElem.className = 'cancel';
  541. showSuggestionPoiList();
  542. });
  543. var oldHasValue = false;
  544. var setInputState = function(hasValue) {
  545. if (hasValue !== oldHasValue) {
  546. if (hasValue) {
  547. resetElem.className = 'clear-input'
  548. } else {
  549. resetElem.className = 'clear-input hide'
  550. }
  551. oldHasValue = hasValue;
  552. }
  553. }
  554. searchWordElem.addEventListener('input', function() {
  555. var value = this.value.replace(/^\s+|\s+$/g, '');
  556. setInputState(!!value);
  557. getSuggestion(value);
  558. });
  559. resetElem.addEventListener('click', function(e) {
  560. setInputState(false);
  561. setTimeout(function() {
  562. searchWordElem.focus();
  563. }, 0);
  564. });
  565. cancelElem.addEventListener('click', function() {
  566. showMap();
  567. });
  568. listWrapElem.addEventListener('click', function(e) {
  569. var target = e.target;
  570. for (; target && target !== listWrapElem; target =
  571. target.parentNode) {
  572. if (target.className === 'active-pos' || target.tagName ===
  573. 'LI') {
  574. var lastActiveElem = listWrapElem.querySelector(
  575. 'i.active');
  576. if (lastActiveElem) {
  577. lastActiveElem.className = '';
  578. }
  579. if (target.className === 'active-pos') {
  580. target = target.children[0]
  581. }
  582. target.querySelector('i').className = 'active';
  583. loc = {
  584. poiname: target.getAttribute('data-name'),
  585. poiaddress: target.getAttribute(
  586. 'data-address'),
  587. latlng: {
  588. lat: target.getAttribute(
  589. 'data-lat'),
  590. lng: target.getAttribute(
  591. 'data-lng'),
  592. }
  593. }
  594. if (nativeMarker) {
  595. nativeMarker.setPoint(new plus.maps.Point(
  596. loc.latlng.lng, loc.latlng.lat));
  597. }
  598. break;
  599. }
  600. }
  601. })
  602. });
  603. };
  604. </script>
  605. </body>
  606. </html>