vue使用高德地圖實(shí)現(xiàn)實(shí)時(shí)定位天氣預(yù)報(bào)功能
實(shí)現(xiàn)效果:
需求:根據(jù)定位功能,使用高德地圖實(shí)現(xiàn)定位當(dāng)前城市的天氣預(yù)報(bào)功能。
JSAPI 的加載
JS API 2.0 版本提供了兩種方案引入地圖 JSAPI:
1. 使用官網(wǎng)提供的 JSAPI Loader 進(jìn)行加載;
2. 以常規(guī) JavaScript 腳本的方式加載;
注意:為避免地圖數(shù)據(jù)協(xié)議和前端資源不匹配導(dǎo)致頁(yè)面運(yùn)行報(bào)錯(cuò),只允許在線加載 JSAPI,禁止進(jìn)行本地轉(zhuǎn)存、與其它代碼混合打包等用法。
使用 JSAPI Loader (推薦)
JSAPI Loader是我們提供的 API 加載器,可幫助開(kāi)發(fā)者快速定位、有效避免加載引用地圖 JSAPI 各種錯(cuò)誤用法,具有以下特性:
- 來(lái)說(shuō)明下上面的案例的問(wèn)題:為什么此時(shí)圖標(biāo)就無(wú)法粘性定位了,主要是因?yàn)樗ㄗ釉兀┎恢酪阅莻€(gè)父元素的滾動(dòng)為準(zhǔn)(現(xiàn)在有兩個(gè)父級(jí)元素都產(chǎn)生了滾動(dòng)),所以我們要對(duì)一層層祖級(jí)元素檢查看是否有overflow屬性如果有將元素設(shè)置 overflow: visible; body {overflow: visible; }; 簡(jiǎn)單理解:兩個(gè)父級(jí)body 和div.main 如果同高度寬度的話(huà),子元素就不知道到底以父元素為主,就會(huì)出現(xiàn)無(wú)法粘性定位的支持以 普通JS 和 npm包 兩種方式使用;
- 有效避免錯(cuò)誤異步加載導(dǎo)致的 JSAPI 資源加載不完整問(wèn)題;
- 對(duì)于加載混用多個(gè)版本 JSAPI 的錯(cuò)誤用法給予報(bào)錯(cuò)處理;
- 對(duì)于不合法加載引用 JSAPI 給予報(bào)錯(cuò)處理;
- 支持指定 JSAPI 版本;
- 支持插件加載;
- 允許多次執(zhí)行加載操作,網(wǎng)絡(luò)資源不會(huì)重復(fù)請(qǐng)求,便于大型工程模塊管理;
- 支持IE9以上的瀏覽器,不支持IE8以下
注意(您在2021年12月02日申請(qǐng)以后的key需要配合您的安全密鑰一起使用)
JSAPI key和安全密鑰的使用
JSAPI key搭配代理服務(wù)器并攜帶安全密鑰轉(zhuǎn)發(fā)(安全)
1) 引入 JSAPI 使用 Loader 之前增加代理服務(wù)器設(shè)置腳本標(biāo)簽,設(shè)置代理服務(wù)器域名或地址,將下面示例代碼中的「您的代理服務(wù)器域名或地址」替換為您的代理服務(wù)器域名或ip地址,其中_AMapService為代理請(qǐng)求固定前綴,不可省略或修改。 (注意您這 個(gè)設(shè)置必須是在加載loader.js的腳本引入之前進(jìn)行設(shè)置,否則設(shè)置無(wú)效。)
項(xiàng)目代碼步驟:
1、在index.html頁(yè)面body中添加密鑰
....... <body> <noscript> <strong>We're sorry but map-demo doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <script type="text/javascript"> window._AMapSecurityConfig = { // serviceHost:'您的代理服務(wù)器域名或地址/_AMapService', securityJsCode:"xxxxxx"http://申請(qǐng)的密鑰 } </script> </body> ......
2、安裝@amap/amap-jsapi-loader 使用
npm i @amap/amap-jsapi-loader --save
頁(yè)面引入:
import AMapLoader from "@amap/amap-jsapi-loader";
3、實(shí)現(xiàn)代碼:
當(dāng)前截取的代碼是天氣部分
... <div class="header-content flex align-items"> <!-- <img src="../../assets/img/index_03.png"/> --> <span class="header-left-txt" id="weather" v-if="weatherObj.nightWeather!=weatherObj.dayWeather"> {{weatherObj.nightWeather}}轉(zhuǎn){{weatherObj.dayWeather}} {{weatherObj.nightTemp?weatherObj.nightTemp+"°C":""}}<i v-show="weatherObj.dayTemp">-</i>{{weatherObj.dayTemp?weatherObj.dayTemp+"°C":""}} </span> <span class="header-left-txt" id="weather" v-else> {{weatherObj.dayWeather}} {{weatherObj.nightTemp?weatherObj.nightTemp+"°C":""}}<i v-show="weatherObj.dayTemp">-</i>{{weatherObj.dayTemp?weatherObj.dayTemp+"°C":""}} </span> <!-- <van-icon name="arrow-down" color="#fff" size="14px" class="ml10"/> --> </div> ...
// 天氣 weatherObj:{ nightTemp:"",//夜間溫度, dayTemp:"",//白天溫度 dayWeather:"",//白天天氣 nightWeather:"",//夜間天氣 }
// 天氣 loadWeather(city) { return new Promise((reslove, reject) => { AMapLoader.load({ key: "xxxxx", // 申請(qǐng)好的Web端開(kāi)發(fā)者Key,首次調(diào)用 load 時(shí)必填 // version: "2.0", // 指定要加載的 JSAPI 的版本,缺省時(shí)默認(rèn)為 1.4.15 plugins: ["AMap.Weather"], // 需要使用的的插件列表,如比例尺'AMap.Scale'等 AMapUI: { // 是否加載 AMapUI,缺省不加載 version: "1.1", // AMapUI 缺省 1.1 plugins: [] // 需要加載的 AMapUI ui插件 } }).then(AMap => { //創(chuàng)建天氣查詢(xún)實(shí)例 let weather = new AMap.Weather(); //執(zhí)行實(shí)時(shí)天氣信息查詢(xún) weather.getForecast(city?city:"武漢市", (err, data)=> { // console.log(err, data); if(data.info=="OK"){ let forecasts = data.forecasts[0]; this.weatherObj = forecasts; console.log(this.weatherObj,"天氣") }else{ console.log("獲取天氣失敗"); } }); reslove(); }) .catch(e => { console.log(e, "高德地圖加載失敗"); reject(e); }); }); }
可以根據(jù)手機(jī)定位獲取當(dāng)前天氣功能,或者可以實(shí)現(xiàn)切換城市獲取天氣。
mounted(){ this.loadWeather("武漢");//高德天氣 }
文檔查看:天氣-服務(wù)-教程-地圖 JS API v2.0 | 高德地圖API
到此這篇關(guān)于vue使用高德地圖實(shí)現(xiàn)實(shí)時(shí)天氣預(yù)報(bào)功能的文章就介紹到這了,更多相關(guān)vue實(shí)時(shí)天氣預(yù)報(bào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue實(shí)現(xiàn)高德地圖添加多個(gè)點(diǎn)標(biāo)記
- vue高德地圖JS API實(shí)現(xiàn)海量點(diǎn)標(biāo)記示例
- vue中PC端使用高德地圖實(shí)現(xiàn)搜索定位、地址標(biāo)記、彈窗顯示定位詳情(完整實(shí)例)
- Vue使用高德地圖選點(diǎn)定位搜索定位功能實(shí)現(xiàn)
- vue+高德地圖實(shí)現(xiàn)地圖搜索及點(diǎn)擊定位操作
- vue項(xiàng)目使用高德地圖的定位及關(guān)鍵字搜索功能的實(shí)例代碼(踩坑經(jīng)驗(yàn))
- vue使用高德地圖實(shí)現(xiàn)添加點(diǎn)標(biāo)記和獲取點(diǎn)擊位置信息的示例代碼
相關(guān)文章
Vue實(shí)現(xiàn)天氣預(yù)報(bào)小應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)天氣預(yù)報(bào)小應(yīng)用,查詢(xún)一些城市的天氣情況,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類(lèi)似頭條效果的橫向滾動(dòng)導(dǎo)航條
這篇文章主要介紹了Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類(lèi)似頭條效果的橫向滾動(dòng)導(dǎo)航條,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-06-06Vue組件高級(jí)通訊之$children與$parent
這篇文章主要為大家介紹了Vue組件高級(jí)通訊之$children與$parent,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06avue-crud多級(jí)復(fù)雜的動(dòng)態(tài)表頭的實(shí)現(xiàn)示例
Avue.js?是基于現(xiàn)有的element-ui庫(kù)進(jìn)行的二次封裝,本文主要介紹了avue-crud多級(jí)復(fù)雜的動(dòng)態(tài)表頭,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12