web前端入门到实战:撸两个天气小程序

经过最近两年多的发展,小程序的地位也逐渐越来越高了,各个平台前赴后继做了自家的小程序平台,随着市场的需求越来愈多,uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台。即使不跨端,uni-app同时也是更好的小程序开发框架。

效果图

1、获取位置信息

在定位功能中,本程序用到腾讯地图的api 以及 腾讯天气的api接口,
需要到官网中注册开发者账号,通过注册后得到的appKey来请求我们需要的数据,详细注册步骤请自行度娘
由于需要用到定位功能,uniapp的getLocation方法获取到的是当前位置的坐标,然后对应腾讯地图具体城市

uni.getLocation({
    // #ifdef MP-WEIXIN
    type: ‘wgs84‘,
    // #endif
    async success (res) {
        const {latitude, longitude} = res
        const result = await that.ajax({url: ‘https://apis.map.qq.com/ws/geocoder/v1‘, data: {
            location: `${latitude},${longitude}`,
            key: ‘‘
        }})
        let {province, city, district} = result.result.address_component
        that.getData(province, city, district)
    },
    fail(){
        uni.showModal({
          content: ‘检测到您没打开定位权限,是否去设置打开?‘,
          confirmText: "确认",
          cancelText: "取消",
          success: function (res) {
            if (res.confirm) {
              // #ifdef MP-WEIXIN
              wx.openSetting({
                success: (res) => {
                    that.getIn()
                }
              })
              // #endif
              // #ifdef MP-ALIPAY
              my.openSetting({
                 success: (res) => {
                    that.getIn()
                 }
              })
              // #endif
            }
          }
        });
    }
})
web前端开发学习Q-q-u-n:784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)

2、查询天气

得到城市名后,再用城市名查询天气的接口,得到未来几天的天气预报。
天气接口使用腾讯天气接口api。
在小程序中使用前,要在小程序设置界面,开发设置中添加request合法域名。

methods: {
    async getData(province, city, district){
        const that = this
        const data = await that.ajax({url: ‘https://wis.qq.com/weather/common‘, data: {
            source: ‘xw‘,
            weather_type: ‘observe|alarm|air|forecast_1h|forecast_24h|index|limit|tips|rise‘,
            province: province,
            city: city,
            county: district
        }})
        that.region = [province, city, district]
        if(data.status != 200){
            uni.showToast({
                title: result.message,
                icon: ‘none‘
            });
            return false;
        }
        if(!data.data.air.aqi_name){
            uni.showToast({
                title: ‘暂无该地区的天气信息‘,
                icon: ‘none‘
            });
            return false;
        }
        that.data = data.data
    }
}
web前端开发学习Q-q-u-n:784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)

3、小程序界面

由于没有什么审美,缺乏想象力,参考腾讯天气的界面来做的。功能十分简单,查看当前地区的天气和切换其他地区的天气,查看最近24小时的天气情况以及最近6天的天气情况,展示今天的农历时间。

4、插件使用

想快速完成小程序的搭建,里面的折线图采用的uchart.js,
因为可以兼容支付宝小程序和微信小程序,农历查询也是采用的插件calendar.js
折线图在支付宝小程序中会有模糊的问题,需要做兼容处理

<template>
<!-- #ifdef MP-ALIPAY -->
<canvas canvas-id="canvas" id="canvas" width="750" height="240" style="width:750rpx;height:240rpx;" class="canvas">
</canvas>
<!-- #endif -->
<!-- #ifdef MP-WEIXIN -->
<canvas canvas-id="canvas" id="canvas" class="canvas">
</canvas>
<!-- #endif -->
</template>

<script>
var wxCharts = require(‘../../utils/chart.js‘);
lineChart = new wxCharts({
    $this: this,
    canvasId: ‘canvas‘,
    type: ‘line‘,
    categories: [‘‘, ‘‘, ‘‘, ‘‘, ‘‘ ,‘‘],
    colors: [‘#ffad35‘, ‘#4fc3f7‘],
    background: ‘#fff‘,
    animation: true,
    series: [{
        name: ‘‘,
        data: that.max,
        format: function (val, name) {
            return val + ‘°‘;
        }
    }, {
        name: ‘‘,
        data: that.min,
        format: function (val, name) {
            return val + ‘°‘;
        }
    }],
    xAxis: {
        disableGrid: true,
        disabled: true,
        axisLine: false
    },
    yAxis: {
        max: Math.max.apply(Math, that.max) * 1 + 0.1,
        disabled: true,
        disableGrid: true,
    },
    legend:{
        show: false
    },
    // #ifdef MP-ALIPAY
    pixelRatio: that.pixelRatio, // 解决支付宝模糊问题
    // #endif
    width: that.cWidth,
    height: that.cHeight
});
</script>

微信小程序有城市选择组件,支付宝的没有可以直接使用的城市组件,uniapp官方介绍:支持安装 mpvue 组件,但npm方式不支持小程序自定义组件(如 wxml格式的vant-weapp),找到一款支付宝可以使用的城市插件:mpvue-citypicker,
城市选择组件

<template>
    <view class="txt-location" @tap="showCityPicker">
        <view class="icon"></view>
        <block v-if="region.length">{{region[0]}}{{region[1]}}{{region[2]}}</block>
        <block v-else>选择城市</block>
        <!-- #ifdef MP-WEIXIN -->
        <picker class="city" mode="region" @change="handleChange" :value="region">
            <view class="picker">
                当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
            </view>
         </picker>
        <!-- #endif -->
    </view>
    <mpvue-city-picker ref="mpvueCityPicker" :pickerValueDefault="pickerValueDefault" @onConfirm="onConfirm"></mpvue-city-picker>
</template>

<script>
import mpvueCityPicker from ‘mpvue-citypicker‘;
export default {
  data() {
    return {
      region: [],
      pickerValueDefault: [0, 0, 1]
    };
  },
  components: {
    mpvueCityPicker
  },
  methods: {
    showCityPicker() {
        // #ifdef MP-ALIPAY
        this.$refs.mpvueCityPicker.show()
        // #endif
    },
    onConfirm(e) {
        if(e.label){
            this.region = e.label.split(‘-‘)
            this.getData(this.region[0], this.region[1], this.region[2])
        }
    },
    handleChange(e) {
        this.region = e.detail.value
        this.getData(this.region[0], this.region[1], this.region[2])
    }
  }
};
</script>
web前端开发学习Q-q-u-n:784783012 ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法(详细的前端项目实战教学视频)

原文地址:https://blog.51cto.com/14592820/2447420

时间: 2024-10-11 09:17:58

web前端入门到实战:撸两个天气小程序的相关文章

web前端入门到实战:css选择器和css文本样式相关

[文章来源微信公众号:每天学编程]---关注,后台领取编程资源 css基础-css选择器和css文本样式相关: 使用link链入外部样式,页面加载时会同时加载样式 @import url("*.css");使用导入式,页面加载完后,才会加载样式 链接伪类的顺序 :link-> :visited ->:hover-> :active 或者 : visited -> : link ->:hover-> :active 选择器的优先级: id选择器>

web前端入门到实战:CSS实现平行四边形布局效果

如何实现下图所示的平行四边形布局效果? 一.skewX的局限 一提到平行四边形,条件反射般的就会想起CSS transform中的skew()/skewX()/skewY()方法,可以让元素斜切,从而实现平行四边形效果 HTML如下: <div class="input-x"> <input class="input" placeholder="您的姓名"> </div> CSS如下,形状的关键就是下面红色高亮

web前端入门到实战:HTML5的video和audio

从理论上来说,HTML5引入的<audio>和<video>元素,使用起来和<img>元素一样简单.对于支持HTML5的浏览器,不再需要使用插件(像flash)来在HTML文档中嵌入音频和视频: <audio src="background_music.mp3"'> <video src="news.mov" width=320 height=240> 实际上,使用这些元素的时候要更加巧妙.由于各家浏览器制

web前端入门到实战:把HTML转成PDF的4个方案及实现

在本文中,我将展示如何使用 Node.js.Puppeteer.headless Chrome 和 Docker 从样式复杂的 React 页面生成 PDF 文档. 背景:几个月前,一个客户要求我们开发一个功能,用户可以得到 PDF 格式的 React 页面内容.该页面基本上是患者病例的报告和数据可视化结果,其中包含许多 SVG.另外还有一些特殊的请求来操纵布局,并对 HTML 元素进行一些重新排列.因此与原始的 React 页面相比,PDF 中应该有不同的样式和额外的内容. 由于这个任务比用简

web前端入门到实战:彻底掌握css动画【transition】

马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所以就导致了许多程序员比较排斥来学习css动画(至少我是),但是一个不懂css动画的前端工程师不能称之为掌握css3,其实当你真正学习css动画之后,你会被它的魅力所吸引的,它可以减少代码量.提高性能. 话不多说,马上和我一起去学习今天的主角transition吧! transition 语法 值 描述 tra

web前端入门到实战:CSS 、JS实现浪漫流星雨动画

1,效果图 2,源码 HTML < body > < div class = "container" > < div id = "mask" > </ div > < div id = "sky" > </ div > < div id = "moon" > </ div > < div id = "stars&qu

web前端入门到实战:彻底掌握css动画【animation】

马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所以就导致了许多程序员比较排斥来学习css动画(至少我是),但是一个不懂css动画的前端工程师不能称之为掌握css3,其实当你真正学习css动画之后,你会被它的魅力所吸引的,它可以减少代码量.提高性能. 上一篇文章我们已经一起学习了transition 的使用,如果有不了解的同学可以查看我的上一篇文章. 话不多

web前端入门到实战:CSS3 filter(滤镜)属性

css3的滤镜filter属性,可以对网页中的图片进行类似Photoshop图片处理的效果,例如背景的毛玻璃效果.老照片(黑白照片).火焰效果等. 一.blur(px)高斯模糊 二.brightness(%)亮度 三.contrast(%)对比度 四.drop-shadow()阴影 注意: 这个 drop-shadow 与 box-shadow 都是在说阴影,但还是有区别的,看下图 图中火焰的图片,是一张png图片,除了火焰以外,其他部分是透明的,我们能看见,box-shadow 是给整个图片加

web前端入门到实战:CSS 阴影动画优化技巧

box-shaodw 在我们的工作中使用以及越来越多,伴随阴影的动画或多或少都有一点.假设,我们有下面这样一个盒子: div { width: 100px; height: 100px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } 希望 hover 的时候,盒阴影从 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3) 过渡到 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3). box-sh