原生js实现查询天气小应用


Posted in Javascript onDecember 09, 2016

本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下

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

原生js实现查询天气小应用

实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市。

实现过程:先调用百度地图的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';
 }
}
//根据城市名创建请求数据及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;
}

一个简单的小demo,还有很多不足之处,欢迎大家提出改进建议。

明天我会更新一下在这其中遇到的一些问题以及解决方法,欢迎关注。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jscript之List Excel Color Values
Jun 13 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
Dec 01 Javascript
JQuery的Validation插件中Remote验证的中文问题
Jul 26 Javascript
如何让DIV可编辑、可拖动示例代码
Sep 18 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
Jan 13 Javascript
js简单的弹出框有关闭按钮
May 05 Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 Javascript
vue-cli中安装方法(图文详细步骤)
Dec 12 Javascript
小程序api实现promise封装过程解析
Nov 21 Javascript
JS实现网页烟花动画效果
Mar 10 Javascript
JS实现太极旋转思路分析
Dec 09 #Javascript
学习使用bootstrap的modal和carousel
Dec 09 #Javascript
PHP+jquery+ajax实现分页
Dec 09 #Javascript
javascript垃圾收集机制的原理分析
Dec 08 #Javascript
基于JS实现的随机数字抽签实例
Dec 08 #Javascript
利用js+css+html实现固定table的列头不动
Dec 08 #Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 #Javascript
You might like
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
js实现二级导航功能
2017/03/03 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
JS实现手写 forEach算法示例
2020/04/29 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
浅谈Python NLP入门教程
2017/12/25 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python3+PyQt5 实现Rich文本的行编辑方法
2019/06/17 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Python list和str互转的实现示例
2020/11/16 Python
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
2014/05/07 HTML / CSS
使用HTML5进行SVG矢量图形绘制的入门教程
2016/02/19 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
12月小学生校园广播稿
2014/02/04 职场文书
搞笑爱情保证书
2014/04/29 职场文书
节约粮食标语
2014/06/18 职场文书
关爱留守儿童标语
2014/06/18 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
单位证明范文
2015/06/18 职场文书
消防演习感想
2015/08/10 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
修改并编译golang源码的操作步骤
2021/07/25 Golang