微信小程序项目实战之天气预报
概述
详细
一、准备工作
1、注册微信小程序
2、注册和风天气账号
3、注册百度地图开放平台(小程序应用)
4、在小程序设置中设置request合法域名
二、程序实现
项目代码截图:
具体实现如下:
1、前端页面的实现
- <!--index.wxml-->
- <image src="../../assets/day.jpg" class="bg"></image>
- <view class="container">
- <view class="nowWeather">
- <view class="city w">{{city}} {{district}}</view>
- <view class="road w">{{street}}</view>
- <view class="temp w b">{{tmp}}°</view>
- <view class="weather w">{{txt}} | 空气 {{qlty}}</view>
- </view>
- <view class="weahterDetail">
- <view class="">
- <view class="w center">{{dir}}</view>
- <view wx:if="{{sc == '微风'}}" class="w b center f50">微风</view>
- <view wx:else class="w b center f50">{{sc}}级</view>
- </view>
- <view class="l"></view>
- <view class="">
- <view class="w center">相对湿度</view>
- <view class="w b center f50">{{hum}}%</view>
- </view>
- <view class="l"></view>
- <view class="">
- <view class="w center">体感温度</view>
- <view class="w b center f50">{{fl}}°</view>
- </view>
- </view>
- </view>
- <view wx:for="{{daily_forecast}}" wx:for-index="i" wx:for-item="item">
- <view class="hor forcast">
- <view class="center">{{day[i]}}</view>
- <view class="hor">
- <image class="img" src="../../assets/icons/{{item.cond.code_d}}.png"></image>
- <view class="center">{{item.cond.txt_d}}|{{qlty}}</view>
- </view>
- <view class="center">{{item.tmp.min}}°/ {{item.tmp.max}}°</view>
- </view>
- </view>
2、css实现
- /**index.wxss**/
- /**common css**/
- .w{
- color: white;
- }
- .b{
- font-weight: bold;
- }
- .l{
- border: 1rpx solid #fff;
- }
- .center{
- text-align: center;
- margin: auto 0;
- }
- .hor{
- display: flex;
- }
- .f50{
- font-size: 50rpx;
- }
- /**index css**/
- .bg {
- width: 100%;
- height: 700rpx;
- }
- .temp{
- font-size: 170rpx;
- }
- .container {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- padding: 0;
- margin: 0;
- height: 700rpx;
- display: block;
- }
- .nowWeather{
- padding: 60rpx;
- }
- .weahterDetail{
- width: 100%;
- display: flex;
- flex-direction: row;
- justify-content: space-around;
- position: absolute;
- bottom: 50rpx;
- }
- .forcast{
- padding: 30rpx;
- margin-left: 16rpx;
- margin-right: 16rpx;
- border-bottom: 1rpx solid #eee;
- justify-content: space-around;
- }
- .img{
- width: 60rpx;
- height: 60rpx;
- margin-right: 16rpx;
- }
3、js实现动态数据绑定
- //index.js
- //获取应用实例
- var app = getApp()
- var day = ["今天","明天","后天"];
- Page({
- data: {
- day : day,
- },
- onLoad: function () {
- console.log('onLoad')
- var that = this
- that.getLocation();
- },
- //获取经纬度方法
- getLocation: function () {
- var that = this
- wx.getLocation({
- type: 'wgs84',
- success: function (res) {
- var latitude = res.latitude
- var longitude = res.longitude
- console.log("lat:" + latitude + " lon:" + longitude);
- that.getCity(latitude, longitude);
- }
- })
- },
- //获取城市信息
- getCity: function (latitude, longitude) {
- var that = this
- var url = "https://api.map.baidu.com/geocoder/v2/";
- var params = {
- ak: "1G50Crx5QIKWy5o4R5Q1ONFSgmFIxfIR",
- output: "json",
- location: latitude + "," + longitude
- }
- wx.request({
- url: url,
- data: params,
- success: function (res) {
- var city = res.data.result.addressComponent.city;
- var district = res.data.result.addressComponent.district;
- var street = res.data.result.addressComponent.street;
- that.setData({
- city: city,
- district: district,
- street: street,
- })
- var descCity = city.substring(0, city.length - 1);
- that.getWeahter(descCity);
- },
- fail: function (res) { },
- complete: function (res) { },
- })
- },
- //获取天气信息
- getWeahter: function (city) {
- var that = this
- var url = "https://free-api.heweather.com/v5/weather"
- var params = {
- city: city,
- key: "894fc2a749104d679fa022c3e71afe83"
- }
- wx.request({
- url: url,
- data: params,
- success: function (res) {
- var tmp = res.data.HeWeather5[0].now.tmp;
- var txt = res.data.HeWeather5[0].now.cond.txt;
- var code = res.data.HeWeather5[0].now.cond.code;
- var qlty = res.data.HeWeather5[0].aqi.city.qlty;
- var dir = res.data.HeWeather5[0].now.wind.dir;
- var sc = res.data.HeWeather5[0].now.wind.sc;
- var hum = res.data.HeWeather5[0].now.hum;
- var fl = res.data.HeWeather5[0].now.fl;
- var daily_forecast = res.data.HeWeather5[0].daily_forecast;
- that.setData({
- tmp: tmp,
- txt: txt,
- code: code,
- qlty: qlty,
- dir: dir,
- sc: sc,
- hum: hum,
- fl: fl,
- daily_forecast: daily_forecast
- })
- },
- fail: function (res) { },
- complete: function (res) { },
- })
- }
- })
三、运行效果
导入到微信web开发者工具,运行即可:
运行后,界面如下:
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
微信小程序项目实战之天气预报的更多相关文章
- 微信小程序项目实战之豆瓣天气
概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...
- 微信小程序项目实战 - 菜谱大全
1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...
- 微信小程序 项目实战(一)生命周期 配置服务器信息 splash启动页
步骤一:小程序 生命周期 //app.js App({ onLaunch: function () { //当小程序初始化完成时,会触发onLaunch(全局只触发一次) }, onShow: fun ...
- 微信小程序 项目实战(二)board 首页
1.项目结构 2.页面 (1)数据(逻辑) board.js // pages/board/board.js Page({ /** * 页面的初始数据 */ data: { imgWrap: [] } ...
- 微信小程序 项目实战(三)list 列表页 及 item 详情页
1.项目结构 2.list 列表页 (1)数据(逻辑) list.js // pages/list/list.js Page({ /** * 页面的初始数据 */ data: { title: '加载 ...
- 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装
WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具,使用以下命令: npm install wepy-cli -g 稍等片刻,成功安装后,即可创建WePY项目. 注意:如果npm安 ...
- 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架
Taro本身实现的情况类似于mpvue,mpvue的未来展望中也包含了支付宝小程序,现在的版本中,也可以使用不同的构建命令来构建出百度小程序的支持,如第10章所示,但是现在Taro先于mpvue实现了 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
随机推荐
- 算法:四种冒泡排序(Bubble Sort)实现
背景 大学关于排序的算法,好像就学会了冒泡排序,这个算是排序界的 hello,world 了,冒泡排序的定义如下: 重复的遍历数组. /// <summary> /// 重复的遍历数组. ...
- java 查询oracle数据库所有表DatabaseMetaData的用法
DatabaseMetaData的用法(转) 一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName ...
- jQuery元素属性attr设置多个键值或函数 删除属性removeAttr
$("Element").attr(name) '取得第一个匹配的属性值,比如$("img").attr("src") $("El ...
- Java中List效率的比较
Java Collections Framework(JCF) 是Java SE中一个基本的类集,几乎所有的项目都会用到,其中的List 则是JCF中最最常用的一个接口.围绕List 接口,有很多实现 ...
- 怎么上传自己的代码/项目到自己的github仓库上
创建新的git仓库 设置新仓库 创建完成后 复制git地址 现在已经有window git客户端了(地址:https://desktop.github.com/),但还是建议用git命 ...
- EasyUI Pagination 分页的两种做法
EasyUI 的 datagrid 支持服务器端分页,但是官方的资料比较少,以下总结了两种 datagrid 的服务器端分页机制,可根据情况具体使用. 一:使用 datagrid 默认机制 后台: p ...
- fdisk 分区格式化为ext4格式分区
第一步:添加硬盘/新建分区(fdisk) 第二步:格式化分区(mkfs.ext4) 第三步:加载分区(mount) 1.第一步:添加硬盘/新建分区(fdisk) a.查看当前系统所有硬盘及分区情况:f ...
- js常用的事件对象
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event. ...
- 你可能不知道的5 个强大的HTML5 API 函数
HTML5提供了一些非常强大的JavaScript和HTML API,来帮助开发者构建精彩的桌面和移动应用程序.本文将介绍5个新型的API,希望对你的开发工作有所帮助. 1. 全屏API(Fulls ...
- document.execCommand("BackgroundImageCache",false,true)解决ie6下的背景图片缓存问题
E6下的背景图片每次使用都会重新发送请求(not 本地),连一个hover效果时候同样的背景图片仅仅位置不同而已,ie6都会再次发送请求,这个令人崩溃的事情需要解决掉:对于ie来说,filter:ex ...