原生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 相关文章推荐
通过javascript的匿名函数来分析几段简单有趣的代码
Jun 29 Javascript
showModelDialog弹出文件下载窗口的使用示例
Nov 19 Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
vue计算属性+vue中class与style绑定(推荐)
Mar 30 Javascript
JavaScript 装逼指南(js另类写法)
May 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
PHP中调用JAVA
2006/10/09 PHP
基于mysql的bbs设计(四)
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
解析thinkphp的左右值无限分类
2013/06/20 PHP
php常用ODBC函数集(详细)
2013/06/24 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
php中strtotime函数用法详解
2014/11/15 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
ES6下React组件的写法示例代码
2017/05/04 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python实现操作文件(文件夹)
2019/10/31 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
为什么要用EJB
2014/04/17 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
生物学学生自我评价
2014/01/17 职场文书
关于学习的决心书
2015/02/05 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
Python中的 enumerate和zip详情
2022/05/30 Python