广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >uniapp微信小程序打卡功能的详细实现流程
  • 899
分享到

uniapp微信小程序打卡功能的详细实现流程

摘要

目录一、Vue后台地图选地点step1|✨ 注册账号并申请Keystep2|✨ 设置 jsapi 安全密钥的脚本标签step3|✨ 地图选点页面demo二、uniapp微信小程序打卡

一、vue后台地图选地点

step1|✨ 注册账号并申请Key

请参考链接注册账号并申请Key 部分

step2|✨ 设置 JSAPI 安全密钥的脚本标签

注意事项: 必须在vue项目index.html中插入该script标签

<script type="text/javascript">
  window._AMapSecurityConfig = {
    securityJsCode:'「您申请的安全密钥」'//「您申请的安全密钥」
  }
</script>

step3|✨ 地图选点页面demo

npm包依赖: npm install --save @amap/amap-jsapi-loader

demo描述 主要实现的 地点搜索 和 地点选取 两个功能点,请结合自己项目修改。

<template>
  <div class="map-demo-container">
    <div id="container" />
    
    <div class="search-bar">
      <el-input id="tipinput" v-model="kw" placeholder="请输入关键字搜索" clearable />
    </div>

    <div style="margin-top: 10px">
      <el-tag type="primary">地址:{{ location.address }}</el-tag>
      <el-tag type="primary">经纬度:{{ location.lnglat }}</el-tag>
    </div>
  </div>
</template>

<script>
import AMapLoader from '@amap/amap-jsapi-loader';

let mapIns = null;// 地图实例
let marker = null;// 标记点
let geocoder = null;// 地理编码与逆地理编码
let infoWindowIns = null;// 信息窗体实例

export default {
  name: 'map-demo',

  data() {
    return {
      kw: '',
      // 当前选择的地址
      location: {
        address: '',
        lnglat: [],
      }
    }
  },

  mounted() {
    this.initMap();
  },

  methods: {
    // 初始化地图
    initMap() {
      let that = this;

      AMapLoader.load({
        "key": "申请好的WEB开发者Key",// 申请好的Web端开发者Key,首次调用 load 时必填
        "version": "2.0",// 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
        "plugins": ['AMap.ToolBar', 'AMap.Scale', 'AMap.Geocoder', 'AMap.PlaceSearch','AMap.AutoComplete'],// 需要使用的的插件列表,如比例尺'AMap.Scale'等
      }).then((AMap)=>{
        // 实例化地图
        mapIns = new AMap.Map('container', {
          viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
          zoom: 11, //初始化地图层级
          // center: [116.397428, 39.90923], //初始化地图中心点
        });

        // 添加地图控件
        mapIns.addControl(new AMap.ToolBar({
          position: {
            top: '40px',
            right: '40px'
          }
        }));
        mapIns.addControl(new AMap.Scale());
      
        // 信息窗体
        infoWindowIns = new AMap.InfoWindow({
          anchor: 'top-center',
          content: '',
        });
        mapIns.on('complete', () => {
          console.log('地图图块加载完成后触发');
        })
        mapIns.on('click', (e) => {
          this.kw = '';
          console.log('点击地图触发e', e);

          let lnglat = [e.lnglat.lng, e.lnglat.lat];

          geocoder.getAddress(lnglat, function(status, result) {
            console.log('status-result', status, result)

            if (status === 'complete' && result.info === 'OK') {
              // result为对应的地理位置详细信息

              that.setMarker({
                address: result.regeocode.fORMattedAddress,
                lnglat,
              })
            }
          })
        })

        // 地理编码与逆地理编码 插件
        geocoder = new AMap.Geocoder({});
        // 输入提示与POI搜索
        var auto = new AMap.AutoComplete({
          input: "tipinput"
        });
        var placeSearch = new AMap.PlaceSearch({
          map: mapIns
        });//构造地点查询类
        auto.on("select", function(e) {
          console.log('select', e);
          // placeSearch.setCity(e.poi.adcode);
          // placeSearch.search(e.poi.name);  //关键字查询查询
          geocoder.getLocation(e.poi.name, function(status, result) {
            console.log('status-result', status, result)
            if (status === 'complete' && result.info === 'OK') {
              // result中对应详细地理坐标信息
              that.setMarker({
                address: e.poi.name,
                lnglat: [result.geocodes[0].location.lng, result.geocodes[0].location.lat],
              })
            }
          })
        });//注册监听,当选中某条记录时会触发
      }).catch(e => {
        throw e;
      })
    },
    // 设置标记
    setMarker({
      address,
      lnglat
    }) {
      // 保存用户当前选择地址信息
      this.location = {
        address,
        lnglat
      }

      // 地图标记和信息窗体
      marker && mapIns.remove(marker);
      marker = new AMap.Marker({
        position: lnglat,
        title: address
      });
      mapIns.add(marker);

      infoWindowIns.setContent(address);
      infoWindowIns.open(mapIns, lnglat);
    }
  }
}
</script>

<style lang="sCSS" scoped>
#container {
  height: 700px;
}

.map-demo-container {
  position: relative;

  .search-bar {
    position: absolute;
    left: 20px;top: 20px;;
    display: flex;
    align-items: center;
    width: 500px;
  }
}
</style>

二、uniapp微信小程序打卡

step1|✨ 获取key

请参考链接

step2|✨ manifest.json中配置权限

image.png

step3|✨ 获取定位地址与经纬度

amap-wx.130.js下载

<script>	
import amap from '@/static/js/amap-wx.130.js';

export default {
    // ...其他选项
    methods: {
        getAddress(){
            const _this = this;
            this.amapPlugin = new amap.AMapWX({
                key: '您申请的key'
            });
            uni.showLoading({
                title: '获取信息中'
            });
            // 成功获取位置
            _this.amapPlugin.getRegeo({
                success: (data) => {
                    console.log('当前定位', data);
                    // data包含定位地址与经纬度等信息,请根据自己项目需求写对应逻辑
                    uni.hideLoading();
                },
                // 获取位置失败
                fail: (err) => {
                    console.log(err)
                    uni.showToast({
                        title:"获取位置失败,请重启小程序",
                        icon:"error"
                    })
                }
            });
        }
    }
}

三、核心流程描述

  • 后台打卡活动选点,并保存地址和经纬度,打卡活动还存在一个打卡范围参数
  • 进入小程序打卡页面,获取定位点地址和经纬度
  • 计算 打卡点 和 定位点 距离,比对打卡范围
  • 若距离 > 打卡范围,则不能打卡
  • 若距离 < 打卡范围,则可打卡

该判断结果,用于页面展示那些内容


getDistance(lat1, lon1, lat2, lon2) {
   var radLat1 = (lat1 * Math.PI) / 180; //将角度换算为弧度
   var radLat2 = (lat2 * Math.PI) / 180; //将角度换算为弧度
   var a = radLat1 - radLat2;
   var b = (lon1 * Math.PI) / 180 - (lon2 * Math.PI) / 180;
   var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
   s = s * 6378137.0; // 取WGS84标准参考椭球中的地球长半径(单位:m)
   // s = Math.round(s * 10000) / 10000; //两点之间距离(保留四位)
   return s; //(单位:m)
},

总结

到此这篇关于uniapp微信小程序打卡功能的文章就介绍到这了,更多相关uniapp微信小程序打卡内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: uniapp微信小程序打卡功能的详细实现流程

本文链接: https://www.lsjlt.com/news/174913.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • uniapp微信小程序打卡功能的详细实现流程
    目录一、vue后台地图选地点step1|✨ 注册账号并申请Keystep2|✨ 设置 JSAPI 安全密钥的脚本标签step3|✨ 地图选点页面demo二、uniapp微信小程序打卡...
    99+
    2022-12-15
    uniapp做微信小程序 uniapp微信小程序打卡 怎样创建打卡小程序
  • uniapp打包成微信小程序的详细过程
    目录一、HbuilderX打包二、发行三、打开小程序体验注意 总结一、HbuilderX打包 选中项目-点击发行(U)- 小程序-(微信仅适用于uniapp)(W) 二、...
    99+
    2022-11-13
  • 微信小程序实现拍照打卡功能
    本文实例为大家分享了微信小程序实现拍照打卡的具体代码,供大家参考,具体内容如下 由于拍照组件是相当于一个块,用隐藏显示的方法不太好,为了更好的用户交互,选择了在一个新的页面调用相机组...
    99+
    2022-11-13
  • 微信小程序实现文章关注功能详细流程
    目录1 数据源设计1.1 文章数据源1.2 关注数据源2 录入测试数据3 创建应用4 首页功能实现5 详情页功能实现6 获取用户的openid7 设置关注的低码方法8 发布预览9 总...
    99+
    2022-11-13
    微信小程序文章关注功能 小程序关注功能
  • 微信小程序实现日历打卡
    本文实例为大家分享了微信小程序实现日历打卡的具体代码,供大家参考,具体内容如下 样式比较简单,要改自己改 let currentMonthDays = new Date(year,...
    99+
    2022-11-13
  • 小程序实现日历打卡功能
    本文实例为大家分享了小程序实现日历打卡功能的具体代码,供大家参考,具体内容如下 一、效果图展示 老惯例,先上效果图 二、实现思路 1、日历展示 例如下图中: 2021月7月打卡日历...
    99+
    2022-11-13
  • uniapp+.net core实现微信小程序获取手机号功能
    目录获取手机号注意:使用方法前端templatejs后端appsetting配置Startup.csGlobalContext.cs调用获取截图获取手机号 从基础库 2.21.2 开...
    99+
    2022-11-13
  • 微信小程序实现2048小游戏的详细过程
    效果图 实例代码 今天我们要用微信小程序实现2048小游戏,效果图如上面所示。游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成为他们的和,每...
    99+
    2022-11-12
  • 微信小程序实现书架小功能
    本文实例为大家分享了微信小程序实现书架功能的具体代码,供大家参考,具体内容如下 实现书架的功能,点击之后可以看pdf 1.设定点击事件 2.在点击事件里面 2.1下载 wx.down...
    99+
    2022-11-13
  • 微信小程序实现翻牌小功能
    本文实例为大家分享了微信小程序翻牌小功能,供大家参考,具体内容如下 页面 <view id="container">     <view wx:for="{{new...
    99+
    2022-11-13
  • JavaScript怎么实现微信小程序打卡时钟
    今天小编给大家分享一下JavaScript怎么实现微信小程序打卡时钟的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、项目展...
    99+
    2023-06-30
  • uniapp开发小程序,实现获取【微信授权登录】功能
    APP微信授权登录需要到微信开放平台申请,在HBuilderX配置APP SDK中微信登录的appId,另外需要跟小程序、公众号授权账号互通的话也需要在微信开放平台申请 1、在微信公众平台申请应用,获取相应的appid和appsecret ...
    99+
    2023-09-28
    uni-app 小程序 微信
  • 微信小程序实现分页功能
    本文实例为大家分享了微信小程序实现分页的具体代码,供大家参考,具体内容如下 今天被提了个需求,需要小程序上实现分页,搜索能力不行,没找到demo,自己想了一下逻辑然后,就自己写了,不...
    99+
    2022-11-13
  • 微信小程序实现答题功能
    本文实例为大家分享了微信小程序实现答题功能的具体代码,供大家参考,具体内容如下 view <view class="topnav">   <image src="...
    99+
    2022-11-13
  • 微信小程序实现拍照功能
    小程序实现一个拍照功能,亲测可用。 页面的样式都是我自己写的,当然你们也可以自己排版写样式。下面一共有三个按钮,返回按钮、拍照按钮、切换摄像头按钮。 首先相机页面是通过wx:if来...
    99+
    2022-11-13
  • 微信小程序实现评价功能
    本文实例为大家分享了微信小程序实现评价的具体代码,供大家参考,具体内容如下 首先去图标库,找一个空心星图片和一个实星图片 先是效果图 代码 wxml文件 for循环5次,初始值是5...
    99+
    2022-11-13
  • 微信小程序实现计算器小功能
    微信小程序现在越来越火爆了,我也看到很多在校大学生都在自学了,那些专门从事APP开发,网页开发的工作者更是看到了小程序的前景,在小程序领域也掺上一脚,本人也是自学小程序的,初期跟很多...
    99+
    2022-11-12
  • 微信小程序如何实现流程进度的图样式功能
    这篇文章给大家分享的是有关微信小程序如何实现流程进度的图样式功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近正在做微信小程序,需要实现一个流程进度的图样式如下面 ...
    99+
    2022-10-19
  • 微信小程序详解如何实现付款功能
    目录1 支付场景2 创建数据源2.1 商品数据源2.2 订单数据源3 创建连接器4 创建应用5 功能开发5.1 首页5.2 商品详情页5.3 订单页总结1 支付场景 我们梳理一下支付...
    99+
    2022-11-13
    微信小程序付款功能 小程序付款
  • JavaScript实现微信小程序打卡时钟项目实例
    目录一、项目展示二、首页三、设置文末:项目代码一、项目展示 这是一款简单实用的小时钟工具 分为工作和休息两种状态 用户可以设置相应的时间 所有的时钟记录都会被保存下来 二、首页 首...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作