微信小程序开发:显示本地天气

前言

微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。微信“小程序”可以为开发者提供基于微信的表单、导航、地图、媒体和位置等开发组件,让他们在微信的网页里构建一个HTML 5应用。同时微信还开放了登录和微信支付等接口,让这个“小程序”可以和用户的微信账号打通。微信将“小程序”定义为“一种新的应用形态”。微信方面强调,小程序、订阅号、服务号、企业号目前是并行的体系。

目录结构

文件结构

小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。

一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:

文件必填作用
app.js小程序逻辑
app.json小程序公共设置
app.wxss小程序公共样式表

一个小程序页面由四个文件组成,分别是:

文件类型必填作用
js页面逻辑
wxml页面结构
wxss页面样式表
json页面配置

注意:为了方便开发者减少配置项,我们规定描述页面的这四个文件必须具有相同的路径与文件名。

配置

我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。

以下是我们天气小程序的简单配置app.json :

{
  "pages": [
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#2f3b53",
    "navigationBarTitleText": "Weather",
    "navigationBarTextStyle": "white"
  },
  "tabBar": {
    "selectedColor": "#73d0f4",
    "list": [
      {
        "pagePath": "pages/index/index",
        "iconPath": "assets/images/home_n.png",
        "selectedIconPath": "assets/images/home.png",
        "text": "首页"
      },
      {
        "pagePath": "pages/logs/logs",
        "iconPath": "assets/images/box_n.png",
        "selectedIconPath": "assets/images/box.png",
        "text": "日志"
      }
    ]
  }
}

然后是app.wxss

/**app.wxss**/
.container {
  height: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: space-between;
  padding: 200rpx 0;
  box-sizing: border-box;
} 

然后是我们的首页结构,这里我们发现首页的结构和react,angularJS,vue等MVC,MVVC框架很像,一样的使用了双大括号来绑定数据


<!--index.wxml-->
<view class="container">
  <view bindtap="bindViewTap" class="userinfo">
    <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
    <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  </view>
  <view wx:if="{{weather.location}}" class="weather">
    <text class="city">所在地 {{weather.location.name}}</text>
    <text class="condition">{{weather.now.text}} {{weather.now.temperature}} ℃</text>
  </view>
</view>

然后是index的样式,这里微信使用了rpx作为像素单位

/**index.wxss**/

.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.userinfo-avatar {
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.userinfo-nickname {
  color: #aaa;
}

.usermotto {
  margin-top: 200px;
}

.weather {
  margin-top: 50px;
  display: flex;
  flex-direction: column;
}

.city, .condition, .temp {
  width: 100%;
  margin-top: 10px;
}

接下来就是重要的index.js了

//index.js
//获取应用实例
var app = getApp()
Page({
  data: {
    userInfo: {},
    weather: {}
  },
  //事件处理函数
  bindViewTap: function () {
    this.getLocation() 
  },
  getLocation: function () {
    var that = this
    wx.getLocation({ //调用wxAPI获取当前位置
      type: 'wgs84',
      success: function (res) {
        var latitude = res.latitude
        var longitude = res.longitude
        wx.request({
          //设置为自己的key
          url: 'https://api.thinkpage.cn/v3/weather/now.json?key=xxxxxxxxxxxxxxxx&location=' + latitude + ':' + longitude,
          success: function (res) {
            console.log(res.data.results[0])
            that.setData({
              weather: res.data.results[0] //返回值为JSON数据可以直接调用
            })
          }
        })
      }
    })
  },
  onLoad: function () {
    console.log('onLoad')
    //var that = this
    //调用应用实例的方法获取全局数据
    app.getUserInfo((userInfo) => {
      //更新数据
      this.setData({
        userInfo: userInfo
      })
    })
    //that.getLocation()
  }
})

这里使用的是心知天气,是一个免费的天气查询api注册一个免费的帐号将上面的key换成你得到的key,
心知API返回JSON参照:

{
  "results": [{
  "location": {
      "id": "C23NB62W20TF",
      "name": "西雅图",
      "country": "US",
      "timezone": "America/Los_Angeles",
      "timezone_offset": "-07:00"
  },
  "now": {
      "text": "多云", //天气现象文字
      "code": "4", //天气现象代码
      "temperature": "14", //温度,单位为c摄氏度或f华氏度
      "feels_like": "14", //体感温度,单位为c摄氏度或f华氏度
      "pressure": "1018", //气压,单位为mb百帕或in英寸
      "humidity": "76", //相对湿度,0~100,单位为百分比
      "visibility": "16.09", //能见度,单位为km公里或mi英里
      "wind_direction": "西北", //风向文字
      "wind_direction_degree": "340", //风向角度,范围0~360,0为正北,90为正东,180为正南,270为正西
      "wind_speed": "8.05", //风速,单位为km/h公里每小时或mph英里每小时
      "wind_scale": "2", //风力等级,请参考:http://baike.baidu.com/view/465076.htm
      "clouds": "90", //云量,范围0~100,天空被云覆盖的百分比 #目前不支持中国城市#
      "dew_point": "-12" //露点温度,请参考:http://baike.baidu.com/view/118348.htm #目前不支持中国城市#
  },
  "last_update": "2015-09-25T22:45:00-07:00" //数据更新时间(该城市的本地时间)
  }]
}

完成

这样我们登录之后点击自己的头像就能在下方显示当前位置的天气了

这里写图片描述

完整代码 https://github.com/chation/wechat-weather

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值