原生js實(shí)現(xiàn)查詢天氣小應(yīng)用
本文實(shí)例為大家分享了js查詢天氣應(yīng)用,供大家參考,具體內(nèi)容如下
demo: https://zsqosos.github.io/weather/
實(shí)現(xiàn)功能:打開網(wǎng)頁時(shí)顯示用戶所在城市的天氣狀況,在輸入框輸入城市可查詢其它城市。
實(shí)現(xiàn)過程:先調(diào)用百度地圖的API來獲取用戶所在的城市,隨后調(diào)用聚合數(shù)據(jù)的天氣API將數(shù)據(jù)放在頁面上。由于ajax不支持跨域,所以采用了jsonp的方式來調(diào)用數(shù)據(jù)。
實(shí)現(xiàn)的原理比較簡單,HTML和css比較長,我就只將js代碼貼出來,想看完整代碼的朋友可以去我的github查看 https://github.com/zsqosos/weather
//調(diào)用jsonp函數(shù)請(qǐng)求當(dāng)前所在城市 jsonp('https://api.map.baidu.com/api?v=2.0&ak=Dv1NMU23dh1sGS9n2tUouDEYY96Dfzh3&s=1&callback=getCity'); window.onload=function(){ //請(qǐng)求天氣車數(shù)據(jù) btn.onclick=function (){ jsonp(createUrl()); } }; function getCity(){ function city(result){ jsonp(createUrl(result.name)); } var cityName = new BMap.LocalCity(); cityName.get(city); } // 數(shù)據(jù)請(qǐng)求函數(shù) function jsonp(url){ var script = document.createElement('script'); script.src = url; document.body.insertBefore(script, document.body.firstChild); document.body.removeChild(script); } //數(shù)據(jù)請(qǐng)求成功回調(diào)函數(shù),用于將獲取到的數(shù)據(jù)放入頁面相應(yīng)位置 function getWeather(response) { var oSpan = document.getElementsByClassName('info'); var data = response.result.data; oSpan[0].innerHTML=data.realtime.city_name; oSpan[1].innerHTML=data.realtime.date; oSpan[2].innerHTML='星期'+data.weather[0].week; oSpan[3].innerHTML=data.realtime.weather.info; oSpan[4].innerHTML=data.realtime.weather.temperature+'℃'; oSpan[5].innerHTML=data.realtime.wind.direct; oSpan[6].innerHTML=data.realtime.weather.humidity+'%'; oSpan[7].innerHTML=data.realtime.time; oSpan[8].innerHTML=data.life.info.ziwaixian[0]; oSpan[9].innerHTML=data.life.info.xiche[0]; oSpan[10].innerHTML=data.life.info.kongtiao[0]; oSpan[11].innerHTML=data.life.info.chuanyi[0]; var aDiv = document.getElementsByClassName('future_box'); for(var i=0; i<aDiv.length; i++){ var aSpan = aDiv[i].getElementsByClassName('future_info'); aSpan[0].innerHTML = data.weather[i].date; aSpan[1].innerHTML = '星期'+data.weather[i].week; aSpan[2].innerHTML =data.weather[i].info.day[1]; aSpan[3].innerHTML = data.weather[i].info.day[2]+'℃'; } changeImg(response); } //根據(jù)獲取到的數(shù)據(jù)更改頁面中相應(yīng)的圖片 function changeImg(data){ var firstImg = document.getElementsByTagName("img")[0]; var firstWeatherId=data.result.data.realtime.weather.img; chooseImg(firstWeatherId,firstImg); var aImg = document.getElementById('future_container').getElementsByTagName('img'); for(var j=0; j<aImg.length; j++){ var weatherId = data.result.data.weather[j].info.day[0]; chooseImg(weatherId,aImg[j]); } } //選擇圖片 function chooseImg(id,index){ switch(id){ case '0': index.src='images/weather_icon/1.png'; break; case '1': index.src='images/weather_icon/2.png'; break; case '2': index.src='images/weather_icon/3.png'; break; case '3': case '7': case '8': index.src='images/weather_icon/4.png'; break; case '6': index.src='images/weather_icon/6.png'; break; case '13': case '14': case '15': case '16': index.src='images/weather_icon/5.png'; break; case '33': index.src='images/weather_icon/7.png'; break; default: index.src='images/weather_icon/8.png'; } } //根據(jù)城市名創(chuàng)建請(qǐng)求數(shù)據(jù)及url function createUrl(){ var cityName = ''; if(arguments.length == 0) { cityName = document.getElementById('text').value; }else{ cityName = arguments[0]; } var url = 'https://op.juhe.cn/onebox/weather/query?cityname=' + encodeURI(cityName) + '&key=1053d001421b886dcecf81a38422a1a2&callback=getWeather'; return url; }
一個(gè)簡單的小demo,還有很多不足之處,歡迎大家提出改進(jìn)建議。
明天我會(huì)更新一下在這其中遇到的一些問題以及解決方法,歡迎關(guān)注。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js關(guān)閉瀏覽器窗口及檢查瀏覽器關(guān)閉事件
js關(guān)閉瀏覽器窗口,不彈出提示框。支持ie6+,火狐,谷歌等瀏覽器,下面以一個(gè)示例為大家詳細(xì)介紹下具體的實(shí)現(xiàn)方法,感興趣的朋友可以參考下2013-09-09一個(gè)頁面放2段圖片滾動(dòng)代碼出現(xiàn)沖突的問題如何解決
這是一段調(diào)用圖片流動(dòng)的代碼?為什么我在首頁同時(shí)復(fù)制出二段代碼后圖片不能流動(dòng)顯示了?遇此問題很是疑惑,于是搜集整理一些實(shí)用技巧以解大伙們的燃眉之急,需要了解的朋友可以參考下2012-12-12JS實(shí)現(xiàn)網(wǎng)頁右側(cè)帶動(dòng)畫效果的伸縮窗口代碼
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)頁右側(cè)帶動(dòng)畫效果的伸縮窗口代碼,通過JavaScript基于時(shí)間函數(shù)實(shí)現(xiàn)頁面元素樣式漸變效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10JavaScript定時(shí)器setTimeout、setInterval使用詳解
網(wǎng)站開發(fā)過程中經(jīng)常會(huì)用到各種各樣的定時(shí)任務(wù),這時(shí)我們會(huì)用到setTimeout和setInterval方法,下面這篇文章主要給大家介紹了關(guān)于JavaScript定時(shí)器setTimeout、setInterval使用的相關(guān)資料,需要的朋友可以參考下2023-04-04javascript和HTML5利用canvas構(gòu)建猜牌游戲?qū)崿F(xiàn)算法
讓我猜猜你心中的牌,先隨機(jī)生成27張牌,不能重復(fù)列出三列牌,然后記住其中一張,然后點(diǎn)擊牌所在的列,多次就可以猜出你想的牌,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-07-07JS實(shí)現(xiàn)的四級(jí)密碼強(qiáng)度檢測(cè)功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的四級(jí)密碼強(qiáng)度檢測(cè)功能,具有實(shí)時(shí)檢測(cè)輸入密碼強(qiáng)度的功能,涉及javascript針對(duì)字符串的正則判定相關(guān)操作技巧,需要的朋友可以參考下2017-05-05JS實(shí)時(shí)彈出新消息提示框并有提示音響起的實(shí)現(xiàn)代碼
本文給大家介紹JS實(shí)時(shí)彈出新消息提示框并有提示音響起的實(shí)現(xiàn)代碼,實(shí)現(xiàn)過程除了使用及時(shí)的推送技術(shù)外還使用ajax實(shí)現(xiàn)此功能,對(duì)js提示框提示音響起的相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-04-04