文章目录

  • 一、文章前言
  • 二、开发流程及准备
  • 三、开发步骤

一、文章前言

此文主要在小程序内实现打卡功能,可根据用户位置与公司设定的打卡范围实时判断打卡场景。

二、开发流程及准备

2.1、注册微信公众平台账号。
2.2、准备腾讯地图用户Key。

三、开发步骤

3.1、访问腾讯位置服务,申请腾讯地图用户Key,因为在后面我们需要将用户的经纬度解析成地址,所以这个步骤是必不可少的。

3.2、点击右上角的登陆,选择注册或绑定现有账号。

3.3、绑定完毕后,选择创建API Key。

3.4、将表单信息填写完成后,点击确定将所创建的API Key保存下来。

3.5、账号跟Key准备好后,我们就可以开始小程序的开发了,打开微信开发者工具,新建项目,选择不使用模板、不使用云服务。


3.6、在pages文件夹下面创建一个文件夹并新建对应的page文件。

3.7、在index.js中引入utils文件夹下面的引入腾讯地图SDK核心类。

const util = require("../../utils/util.js");
const app = getApp();
// 引入腾讯地图SDK核心类
var QQMapWX = require('../../utils/map/qqmap-wx-jssdk.js');
var qqmapsdk;

3.8、在onLoad事件中我们将其进行实例化,这时就要用到我们所申请的key了。

    qqmapsdk = new QQMapWX({key: '刚刚所申请的key填到这里'});

3.9、准备工作做好后,我们尝试一下这个SDK是否有效。将公司设定的打卡地址作为参数进行解析,然后将结果进行输出。

qqmapsdk.geocoder({address: '广东省深圳市南山区粤海街道深圳湾科技生态园9栋B座',success: function(res) {//成功后的回调console.log(res);}
});

3.10、可以看到,我们所需要的经纬度等信息都顺利的解析出来了。

3.11、公司地址解析出来后,我们就需要获取用户实时地址信息了,这里需要调用wx.getLocation函数将结果进行打印输出。

  wx.getLocation({type: 'wgs84',success (res) {console.log(res);}});

3.12、longitude和latitude就是我们所需要的用户经纬度字段了,现在我们需要将用户经纬度逆转析为省市区地址将其显示在界面上。

 //将用户经纬度转换为地址
qqmapsdk.reverseGeocoder({//地址解析location: {longitude: userlng,latitude: userlat,},success: function (res) {console.log(res);}
});

  that.setData({userAddress:res.result.address});
<text class="addressText">{{userAddress}}</text>

3.13、接下来封装两个函数,用于获取两个经纬度之间的距离。

function rad(d) {return d * Math.PI / 180.0;
}
function distanceOf(p1, p2) {var radLng1 = rad(p1.x);var radLng2 = rad(p2.x);var mdifference = radLng1 - radLng2;//  两点纬度之差var difference = rad(p1.y) - rad(p2.y);//    经度之差//  计算两点距离的公式var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(difference / 2), 2)+ Math.cos(radLng1) * Math.cos(radLng2) * Math.pow(Math.sin(mdifference / 2), 2)));//    弧长等于弧度乘地球半径(半径为米)distance = distance * 6378.137;//   精确距离的数值distance = Math.abs(Math.round(distance * 10000) / 10);return distance;
}

3.14、将公司地址所解析的经纬度以及用户的经纬度进行拼接作为参数传递给我们所封装的函数。这个dis就是两个经纬度之间的距离,单位是米。

//var dis = distanceOf({"x":113.954791,"y":22.531843},{"x":113.952385,"y":22.53091});
//comoanylng:公司经度,comoanylat:公司纬度,userlng:用户经度,userlat:用户纬度var dis = distanceOf({"x":comoanylng,"y":comoanylat},{"x":userlng,"y":userlat});

3.15、js任务完成后需要实现对应的wxml及css样式。

<view class="userInfo"><view><image src="../../../images/cat.jpg"></image></view><view class="name"><view class="uName">摔跤猫子</view><view><text style="color:#7D8082;">考勤</text><text style="color:#207CD0;">(查看规则)</text></view></view>
</view>
<view class="content1"><view class="contentBox1"><view class="time"><view class="uptime">上班09:00</view><view class="cu-item cuitemText"><text class="cuIcon-roundcheckfill lg text-blue"></text><text style="color:#74787E;margin-left:10rpx;">08:52已打卡</text></view><view class="iconText">外勤</view></view><view class="time"><view class="uptime">下班18:30</view><view class="cu-item cuitemText"><text class="cuIcon-roundclosefill lg text-red"></text><text style="color:#74787E;margin-left:10rpx;">暂未打卡</text></view></view></view><view class='cu-load load-modal' style="box-shadow: 0 0 0 0 white;"><view class="cu-item"><text class="cuIcon-locationfill lg  {{normal?'text-green':'text-red'}}"></text></view><view class='gray-text'>{{normal?'正常打卡':'外勤打卡'}}</view>
</view>
<view class="cu-item cuitemAddress"><text class="cuIcon-location lg text-blue"></text><text class="addressText">{{userAddress}}</text>
</view>
</view>
/* pages/basics/load/load.wxss */
page {background: #F4F5F7;
}.userInfo {width: 702rpx;height: 120rpx;margin-left: 24rpx;margin-top: 24rpx;background: white;border-radius: 25rpx;display: flex;
}.userInfo image {width: 90rpx;height: 90rpx;margin-top: 15rpx;margin-left: 24rpx;border-radius: 15rpx;
}.name {margin-left: 20rpx;height: 90rpx;margin-top: 15rpx;
}.uName {font-size: 40rpx;
}.content1 {height: 1000rpx;background: white;margin-top: 24rpx;width: 702rpx;margin-left: 24rpx;border-radius: 25rpx;
}.contentBox1 {width: 702rpx;border: 1rpx solid white;display: flex;
}.time {background: #F4F5F7;width: 315rpx;height: 120rpx;margin-top: 24rpx;margin-left: 24rpx;border-radius: 20rpx;
}.uptime {margin-top: 15rpx;font-size: 35rpx;margin-left: 20rpx;
}.cuitemText {font-size: 30rpx;margin-top: 10rpx;margin-left: 20rpx;
}.cuitemAddress {margin-top: 270rpx;text-align: center;
}.addressText {color: #74787E;margin-left: 10rpx;
}.iconText {position: absolute;margin-top: -105rpx;margin-left: 235rpx;width: 80rpx;background: green;color: white;border-top-right-radius: 20rpx;border-bottom-left-radius: 20rpx;text-align: center;
}

3.16、我们在调用计算距离的函数时定义一个变量用于判断当前用户所处位置是否在公司规定的打卡范围内。假设公司规定的打卡范围是200米,那么当距离超出时便给false,页面上也根据对应的值赋予不同的class样式。

  that.setData({normal:dis<=200?true:false});
 <view class="cu-item"><text class="cuIcon-locationfill lg  {{normal?'text-green':'text-red'}}"></text></view><view class='gray-text'>{{normal?'正常打卡':'外勤打卡'}}</view>

3.17、为了优化用户体验可以在事件中加上setInterval事件,设置时间间隔,每隔多久请求一次用户地址,因为用户在打卡的时候可能正在往公司路上赶,是一个高速移动的过程。

setInterval(function () {
//每隔一秒请求一次,中间放需要请求的函数
}, 1000);

这里采用的一个比较简单的方式实现的小程序打卡定位功能,围绕公司考勤或其他业务场景设计,有兴趣的小伙伴可以往里面补充进其他的想法,让它变得更齐全好用。

微信小程序|基于小程序实现打卡功能相关推荐

  1. 微信小程序 | 基于小程序+Java+WebSocket实现实时聊天功能

    一.文章前言 此文主要实现在小程序内聊天对话功能,使用Java作为后端语言进行支持,界面友好,开发简单. 二.开发流程及工具准备 2.1.注册微信公众平台账号. 2.2.下载安装IntelliJ ID ...

  2. 基于高德地图JsAPI进行浏览器精确定位,实现手机端考勤打卡功能

    前言: 由于项目需求需要在项目中实现手机端(基于网页)考勤打卡功能,最初考虑使用H5自身定位功能,但尝试过后,效果很不稳定.然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和 ...

  3. WeChat之小工具:基于C++程序代码设计的查看微信撤销、撤回消息(包括文本、图片、视频等)GUI小工具

    WeChat之小工具:基于C++程序代码设计的查看微信撤销.撤回消息(包括文本.图片.视频等)GUI小工具 导读      哈哈,千万不要给程序猿随便发信息,程序猿认真起来,别说你发的微信信息,就连你 ...

  4. 微信小程序-基于canvas画画涂鸦

    代码地址如下: http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  5. 微信小程序基于swiper组件的tab切换

    代码地址如下: http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  6. 微信小程序基于scroll-view实现锚点定位

    代码地址如下: http://www.demodashi.com/demo/14009.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.c ...

  7. 【基于微信的物品回收小程序的设计与实现】

    这里写目录标题 一.摘要 二.课题目标 三.系统分析 四.界面效果及功能展示 五.源码获取 一.摘要 移动互联网的盛行,使得二手交易平台把主战场转移到移动端上.二手交易市场每年大量的成交额令人怦然心动 ...

  8. web前端学习(三):微信小程序基于H5规范,开发Android应用程序

    前言: 微信小程序开发框架的目标是通过尽可能简单,高效的方式让开发者可以在微信中开发具有原生APP体验的服务. 整个小程序框架系统分为两部分,逻辑层,视图层,小程序提供了自己的视图层描述语言, WXM ...

  9. 微信小程序基于云数据库简单实现帖子点赞功能。

    思路: 1·用云函数或者app.js获取用户openid,在每个帖子里面like_people数组里添加点赞过该帖子的用户openid.获取帖子云数据存放到suju:[]里. 2·点击点赞按钮图标变换 ...

  10. 基于微信共享充电桩小程序系统设计与实现 开题报告

      毕业论文 基于微信共享充电小程序系统 开题报告 学    院: 专    业: 年    级: 学生姓名: 指导教师: 黄菊华   XXXX大学本科生毕业论文(设计)开题报告书 姓   名 Xxx ...

最新文章

  1. 2016年全国计算机技术与软件,2016年的上半年的全国计算机技术与软件专业技术资格(水平)考.doc...
  2. PHP header的一些用法
  3. java中的fd是什么意思_java中关键字和保留字分别是什么意思
  4. USACO 之 Section 2.3 (已解决)
  5. 小白程序员仅用 5 分钟入职 BAT,他只做了这件事!
  6. JAVA面试--电商业内大厂
  7. 分形——数学与艺术结合的明珠
  8. CCF201609-4 交通规划(100分)
  9. 1.1 WEB API 在帮助文档页面进行测试
  10. StringBuffer是字符串缓冲区
  11. 19所大陆高校上榜!2021泰晤士世界大学影响力排名发布
  12. 苹果iPod设计及商业操作内幕
  13. HTML+CSS个人简历练习
  14. 什么样的联系人管理软件最有效?这里有管理联系人的3款实用软件
  15. 跳转到app下载页面和app评论页面
  16. 项目销毁主页Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService异常
  17. CMD命令窗口全屏设置
  18. 配置路由器用SSH登陆
  19. 01 JDK8安装教程
  20. 千兆网线和百兆网线的做法一样吗

热门文章

  1. 苹果关掉200m限制_苹果怎么取消200m限制
  2. python带你过不一样的“清明节”和看神奇的《清明上河图》
  3. 北京市个人租房攻略,看完你就懂了
  4. c语言中calc是什么函数,CSS 3 中的计算函数 calc() 有啥用?
  5. 平均值、方差、标准差
  6. 在深圳,想转行学IT到...
  7. 用动画做出一个正方体并且3d旋转,详解
  8. 今天你的人生做减法了吗?
  9. git合并其他分支的代码产生冲突处理过程
  10. 计算机的坚果云怎么删除,如何删除坚果云残留图标