原生js實現查詢天氣的小應用

來源:互聯網
上載者:User

標籤:time   方式   value   代碼   rip   val   name   ref   btn   

demo:https://zsqosos.github.io/weather/


實現功能:開啟網頁時顯示使用者所在城市的天氣狀況,在輸入框輸入城市可查詢其它城市。

實現過程:先調用百度地圖的API來擷取使用者所在的城市,隨後調用彙總資料的天氣API將資料放在頁面上。由於ajax不支援跨域,所以採用了jsonp的方式來調用資料。

實現的原理比較簡單,HTML和css比較長,我就只將js代碼貼出來,想看完整代碼的朋友可以去我的github查看 https://github.com/zsqosos/weather

 

//調用jsonp函數請求當前所在城市jsonp(‘https://api.map.baidu.com/api?v=2.0&ak=Dv1NMU23dh1sGS9n2tUouDEYY96Dfzh3&s=1&callback=getCity‘);window.onload=function(){    //請求天氣車資料    btn.onclick=function (){        jsonp(createUrl());    }};function getCity(){    function city(result){        jsonp(createUrl(result.name));    }    var cityName = new BMap.LocalCity();    cityName.get(city);}// 資料請求函數function jsonp(url){    var script = document.createElement(‘script‘);    script.src = url;    document.body.insertBefore(script, document.body.firstChild);    document.body.removeChild(script);}//資料請求成功回呼函數,用於將擷取到的資料放入頁面相應位置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);}//根據擷取到的資料更改頁面中相應的圖片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‘;    }}//根據城市名建立請求資料及urlfunction 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;}

 

 一個簡單的小demo,還有很多不足之處,歡迎大家提出改進建議。

明天我會更新一下在這其中遇到的一些問題以及解決方案,歡迎關注。

原生js實現查詢天氣的小應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.