微信企业号开发:微信考勤摇一摇考勤

看到网上又不好微信企业号的摇一摇考勤,自己也想做一个,但查遍了微信企业号文档,也没有看到摇一摇的相关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>

实现效果


版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 08:47:51

微信企业号开发:微信考勤摇一摇考勤的相关文章

微信企业号开发:微信考勤百度地图定位

之前在微信企业号开发:微信考勤中使用了百度地图的定位组件,但发现在部分手机上会出现定位失败的提示,于是有研究了一下百度地图.原来使用的Web组件百度不打算更新了,也是重新查了一下百度地图的其他API,还有一个JavaScript API大众版,于是试了试,没想到竟然解决了. 核心代码很简单: <div id="allmap"></div> <script type="text/javascript" src="http://a

微信企业号开发:微信考勤Cookies的使用

使用微信考勤,每次使用微信企业号开发:微信用户信息和web网页的session的关系这个里边的方法,调用微信的接口,有点慢,微信官方也推荐使用Cookies,但如何使用Cookies,自己却一直没有搞清楚. 原来一直以为在服务端获取客户端的数据有两个方法,一种就是查询字符串放在URL上,一种就是放在form中,post提交,自己以前也使用过但主要是在客户端使用,从来没法把 Cookies中的数据直接提交到服务端,即使有也是通过把Cookies中的数据读取出来后放入form中的隐藏字段,然后pos

微信企业号开发:微信用户信息和web网页的session的关系

     微信企业号的用户是须要验证的,因此能关注企业号的用户事实上就是已经通过验证的用户.但企业应用中打开一个网页,在这个网页中怎样依据微信用户的信息创建web应用中最长使用的session呢?微信用户怎样和web的session关联起来呢?    比如:一个应用.依据不同的人员,显示不同的内容,各个网页之间须要session来传递一些信息.在微信企业号中怎样处理呢? 这个问题须要涉及的接口是OAuth2验证接口,须要配置可信域名,初始化session. 一下以一个带有URL的菜单为例进行说明

微信企业号开发:微信考勤百度地图定位,错误修正

在使用百度地图进行微信考勤时,遇到很多问题,尤其是定位问题,我知道定位有偏差,但使用百度地图,几十次后,偶尔一次会错的离谱,例如直接就定位到了外省,例如我一直在西安,一次定位到了天津,一次定位到了石家庄,我不知道为什么会这样.偏差几千米还能理解,可偏差几百公里就是在让人不能理解了.是因为我用的百度API是免费的吗?当然出现的次数不多,一般情况下,四五十次,会偶尔出现一两次这么离谱的偏差. 实在找不到原因,也不能是缓存,因为我没有去过石家庄,天津.没办法,但这个问题,又不能不解决,于是只能把四种计

微信企业号开发:微信考勤百度地图定位二

使用微信考勤百度地图定位中的方法定位,可以定位到一个具体的位置某省某市某区某路某号,总是让人感觉显示不是很友好,如果直接显示,软件园,科技园之类的是不是更好呢?于是查了一下百度地图的相关文档,其实也很简单.百度有附近的功能,还有地址解析的功能,都可以实现. 例如我就是用了Geocoder服务,实现了需要的效果. 核心代码: var map = new BMap.Map("allmap"); var circle = new BMap.Geolocation(); circle.getC

[转载]微信企业号开发如何建立连接

连接将使你的企业号更具价值,你可以使用以下三种方式,连接你的企业号及企业应用: 1.企业应用调用企业号提供的接口,管理或查询企业号后台所管理的资源.或给成员发送消息等,以下称主动调用模式. 2.企业号把用户发送的消息或用户触发的事件推送给企业应用,由企业应用处理,以下称回调模式. 3.用户在微信中阅读企业应用下发的H5页面,该页面可以调用微信提供的原生接口,使用微信开放的终端能力,以下称JSAPI模式. 通过这三种连接方式的结合,你可以在企业号中建立功能强大的移动轻应用,并依托微信数亿活跃用户,

.net之微信企业号开发(一) 所使用的环境与工具以及准备工作

前言 一直以来,从事的是.net winform的编程,虽然对移动互联这块很感兴趣,但是由于现有的工作和移动互联之间隔的太远,也就没有时间和精力好好的去研究和实现.今年年初辞职了,刚好朋友那里希望建立一套新的网点销售管理系统,将原有的PC中的一些东西,移植到手机终端来.于是我接受了这个任务,除了给他们搭建新系统外,也慢慢的接触到了移动互联应用,开始了我的移动互联征程. 由于WEB应用本身的局限性,同时自身也不具备多个平台开发APP的精力和实力.我选择了微信的企业号开发.对于微信这样一个普及很广的

微信企业号开发之回调模式的接口开发

一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信的信息,转发到用户提供的一个回调接口上,该接口解析用户发送过来的信息,解析后进行相应,而且回调模式中,可以调用的东西不少,扫码,图片,视频,地理位置信息等. 在应用的模式下,选择回调模式,之后,需要设置3个参数(1.回调接口URL:2.token:3.ASESKey),URL就是提供的回调接口,微信

Force.com微信企业号开发系列(一) - 启用二次验证

微信于9月份推出企业号后引起了业界不小的反响,许多企业都在思索企业号将如何影响企业的运营,从本文开始,我将详细阐述微信企业号开发的相关知识,而本文将着重介绍如何实现更高安全机制的二次验证. 申请企业体验号: 企业号顾名思义就是企业来申请的号,申请时就像申请服务号一样,需要提供各种组织证明文件,对广大开发者来说很难操作,好在腾讯公司也像服务号一样开通了体验号申请,留意企业体验号的有效期间非常短,只有90天(服务号测试账号有1年有效期),且如果企业体验号长期不使用还会收到腾讯公司的提前失效提醒邮件.