MUI框架开发天气App

一、开发天气App的初衷

我之前为了完成一个简单开发作业,有开发过一款天气App,奈何当时修行不够,涉世未深,开发出来的界面丑哭我了。所以,暑假痛定思痛,努力学习前端知识,经过不懈的努力,开发出了这款功能还算齐全,界面还算好看的天气App。

二、页面展示

在这里插入图片描述
在这里插入图片描述

三、实现逻辑

采用MVC模式,页面中所有数据挂载均采用ES6写法。首先,通过调用百度地图API获取地理位置信息,然后通过获取的地理位置信息中的城市信息作为参数传给天气API,处理获取到的天气信息。这里,24小时天气信息查询采用css样式实现左右滑动查询效果。空气质量模块采用D3技术将数据可视化,方便用户提取有效信息。

四、关键代码讲解

数据模型

// 地理位置获取、天气信息获取有关的一些数据模型
//与定位有关的数据模型
let positionInfoM = {
	version:'v1.0',
	author:'wmyang',
	province:'',//获取位置信息里的省份信息,包括直辖市、自治区
	city:'',//获取位置信息里的城市信息
	api:'http://api.map.baidu.com/getscript?v2.0&ak=tB2WqgZGsIVlX4M8U32ihD40UMznweVh'
	
}

//与天气有关的数据模型
let weatherInfoM = {
	version:'v1.0',
	author:'wmyang',
	apisite : 'weather.easyapi.com',
	// api : 'https://api.jisuapi.com/weather/query?appkey=e9f609465ea36117&city=',
	api:'https://api.jisuapi.com/weather/query?appkey=0c2d9f64f12fa232&city=',
	icon:{:"./image/sun.png",
		多云:"./image/cloud.png",
		多云:"./image/cloud.png",:"./image/yintian.png",
		中雨:"./image/middle-rain.png",
		小雨:"./image/middle-rain.png",
		大雨:"./image/middle-rain.png",
	},
}

获取地理位置信息

//获取地理位置信息逻辑处理
let LBSAction = {
	version:'v1.0',
	author:'wmyang',
	getPositionInfo:function(){
		//通过ip地址获取地理位置信息
		$.getScript(positionInfoM.api,function(){
			console.log("ok");//获取成功打印ok
			//获取地理位置(GEO)信息
			let geo = new BMap.Geolocation();
			console.log(geo)
			geo.getCurrentPosition(function(position){
				//将获取到的省份信息,城市信息传递给数据模型
				positionInfoM.province = position.address.province;
				positionInfoM.city= position.address.city;
				console.log(positionInfoM.province);
				console.log(positionInfoM.city);
				//将数据绑定到页面
				let tepl1 = `<span id="address">${positionInfoM.city}</span>
							<img id="address-img" src="image/address.png" />`;
				
				$("#address-info").html(tepl1);
				weatherAction.getWeatherInfo();
				setTimeout(function(){ pVisual.pVisualGet(); }, 1000);
			})
		})
	}
}

获取天气信息,请求的url采用model模型里写好的url

//获取地理位置信息逻辑处理
let weatherAction = {
	version:'v1.0',
	author:'wmyang',
	getWeatherInfo:function(){
		$.ajax({
			// url : weatherInfoM.api+positionInfoM.city,
			url : weatherInfoM.api+positionInfoM.city,
			dataType:'jsonp',
			success:function(data){
				
				console.log(positionInfoM.city);
				console.log(data);//将获取到的天气信息打印出来
				if(data.msg=="ok"){
					//这里是对获取到的天气信息的处理
				}
			}error:function(){
				console.log("request error")
			}

D3可视化,其中data数组里存放的是绘画饼状图的颜色设置,可自定义

//D3可视化处理空气质量数据
let pVisual = {
	pVisualGet:function(){
		var width = 100,
		    height = 100;
		var dataset = new Array(2);
		console.log(weatherQuality);
		dataset[0] = weatherQuality;
		dataset[1] = 500;
		var svg = d3.select("#population").append("svg")
		        .attr("width",width)
		        .attr("height",height)
		var pie = d3.layout.pie();
		 
		//用做弧线的方法来作饼状图,因为弧线有粗细,调整粗细就能变成饼状图
		var outerRadius = 50,
		    innerRadius =30;
		var arc = d3.svg.arc()
		    .innerRadius(innerRadius)
		    .outerRadius(outerRadius);
		    var data=["#8acef5","#eeeeee"];
		var arcs = svg.selectAll("g")
		    .data(pie(dataset))//通过 D3中提供的d3.layout.pie()函数将它转换成角度。这里5个整数被转换成了5个 Object ,每个里面存有起始角度和结束角度,以及原整数
		    .enter()
		    .append("g")
		    .attr("transform","translate("+outerRadius+","+outerRadius+")");
		 
		arcs.append("path")
		.attr("fill",function(d,i){
		    return data[i];
		})
		.attr("d",function(d){
		    return arc(d); //绘制圆环
		})
		 
		
	}
}

左右滑动查看24小时天气信息

/*hourly是承载24小时天气信息的父容器,hourly-weather是承载每小时天气信息的子容器 */
#hourly{
	height:100px;
	display:flex;
	flex-direction: column;
	flex-wrap: wrap;
	justify-content: space-around;
	align-items: flex-start;
	overflow-x: auto;
	overflow-y: hidden;
/* 	background-color: #577e82; */
}

.hourly-weather{
	height:100px;
	width:80px;
	padding:6px;
	margin-top: 5px;
	margin-bottom: 15px;
}

状态栏沉浸式设计

/* 使顶部状态栏透明以达到应用全屏显示的效果,其中背景图片与你设置的应用背景图片一致 */
body{
	 background:url(../image/day_bac.png)no-repeat;   
	 background-size:100% 100%;                  
	 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../image/day_bac.png',sizingMethod='scale');  
}

五、源码资源

源码资源:源码地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值