合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
看到网上又不少微信企业号的摇一摇考勤,自己也想做一个,但查遍了微信企业号文档,也没有看到摇一摇的相关API,本以为做不出来了,想不到再问了同事后,才知道其实很简单,摇一摇不需要微信企业号的文档,HTML5就有,摇一摇其实就是相当于点击了保存按钮而已。 其实获取地理位置HTML5也支持。 HTML5 - 使用地理定位 ~~~ <script> var x=document.getElementById("demo"); function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else{x.innerHTML="Geolocation is not supported by this browser.";} } function showPosition(position) { x.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude; } </script> ~~~ 摇一摇的核心代码: ~~~ /需要判断浏览器是否支持 if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', deviceMotionHandler, false); } else { $("#shake").html('您的手机现在还不支持摇一摇功能。'); } function deviceMotionHandler(eventData) { var acceleration = eventData.accelerationIncludingGravity; var curTime = new Date().getTime(); //获取当前时间戳 var diffTime = curTime - last_update; if (diffTime > 100) { last_update = curTime; //记录上一次摇动的时间 x = acceleration.x; //获取加速度X方向 y = acceleration.y; //获取加速度Y方向 z = acceleration.z; //获取加速度垂直方向 var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; //计算阈值 if (speed > SHAKE_THRESHOLD) { btnSave(); } } //记录上一次加速度 last_x = x; last_y = y; last_z = z; } ~~~ 完整的摇一摇考勤代码: ~~~ <!doctype html> <html> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <title>考勤打卡</title> <script src="http://api.map.baidu.com/components?ak=1IYR&v=1.0"></script> <link rel="stylesheet" href="../assets/css/amazeui.min.css"> <link rel="stylesheet" href="../assets/css/app.css"> <script src="../assets/js/jquery.min.js" type="text/javascript"></script> <script src="../assets/js/amazeui.min.js" type="text/javascript"></script> <script src="../assets/js/amazeui.widgets.helper.min.js" type="text/javascript"></script> <script type="text/javascript"> var SHAKE_THRESHOLD = 3000; //定义一个摇动的阈值 var last_update = new Date().getTime(); //定义一个变量记录上一次摇动的时间 var x = y = z = last_x = last_y = last_z = 0; //定义x、y、z记录三个轴的数据以及上一次触发的时间 $(document).ready(function () { $("#btnSave").click(function (e) { // 绑定保存按钮 btnSave(); }) //需要判断浏览器是否支持 if (window.DeviceMotionEvent) { window.addEventListener('devicemotion', deviceMotionHandler, false); } else { $("#shake").html('您的手机现在还不支持摇一摇功能。'); } var Name = $("#Name").val(); if (!Name) {//没有session $("#session").show(); } }); function deviceMotionHandler(eventData) { var acceleration = eventData.accelerationIncludingGravity; var curTime = new Date().getTime(); //获取当前时间戳 var diffTime = curTime - last_update; if (diffTime > 100) { last_update = curTime; //记录上一次摇动的时间 x = acceleration.x; //获取加速度X方向 y = acceleration.y; //获取加速度Y方向 z = acceleration.z; //获取加速度垂直方向 var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; //计算阈值 if (speed > SHAKE_THRESHOLD) { btnSave(); } } //记录上一次加速度 last_x = x; last_y = y; last_z = z; } function btnSave() { var formId = "form"; var isOk = Checkform(); //验证form if (isOk == false) { return; } $.ajax({ type: "post", url: "KaoQinAjax.ashx?OperationType=kaoqin", data: $(formId).serialize(), success: function (obj) { if (obj.IsSuccess == true) { alertInfo(obj.Msg); window.location = "KaoQinList.aspx"; } else { alertInfo(obj.Msg); } } }); } function Checkform() { var address = $("#address").val(); if (!address) { alertInfo("地理位置为空,请开打GPS,刷新所在位置"); return false; } return true; } function alertInfo(text) { alert(text); } </script> </head> <body> <form id="form1" runat="server" class="am-form" > <fieldset> <legend>考勤打卡</legend> <input type="hidden" id="Name" name="Name" value="<%=Name%>" /> <div class="am-form-group"> <label for="doc-ta-1">所在位置 </label> <p> <lbs-geo id="geo" city="北京" enable-modified="false"></lbs-geo> <input type="hidden" id="address" name="address"/> <input type="hidden" id="lng" name="lng"/> <input type="hidden" id="lat" name="lat"/> </p> </div> <script> // 先获取元素 var lbsGeo = document.getElementById('geo'); //监听定位失败事件 geofail lbsGeo.addEventListener("geofail", function (evt) { alert("地理位置为空,请开打GPS,刷新所在位置"); }); //监听定位成功事件 geosuccess lbsGeo.addEventListener("geosuccess", function (evt) { var address = evt.detail.address; var coords = evt.detail.coords; var x = coords.lng; var y = coords.lat; $("#address").val(address); $("#lng").val(x); $("#lat").val(y); }); </script> <div id="shake" style="font-size: 14px; margin: 10px; line-height: 35px;"></div> <div id="session" style="font-size: 14px; margin: 10px; line-height: 35px;display:none">请关闭后,重新打开</div> <button type="button" class="am-btn am-btn-primary am-btn-block" id="btnSave">不能摇一摇点击</button> </fieldset> </form> </body> </html> ~~~ 实现效果 **![](https://box.kancloud.cn/2016-01-14_569757de19514.jpg)**