前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTML5 实现手机摇一摇

HTML5 实现手机摇一摇

作者头像
HTML5学堂
发布2018-03-12 16:56:20
4.1K0
发布2018-03-12 16:56:20
举报
文章被收录于专栏:HTML5学堂

HTML5新增了一些JavaScript API接口,比如地理定位、重力感应等。今天主要介绍devicemotion事件(设备事件),它提供设备的加速信息,表示为定义在设备上的坐标系。其还提供了设备在坐标系中的自转速率。若可行的话,事件应该提供设备重心处的加速信息。本文给大家讲解了HTML5实现手机摇一摇的效果。

手机摇一摇的实现思路:

1、检测设备是否支持重力传感;

代码语言:javascript
复制
// 监听运动传感事件,查看是否支持硬件运动
if (window.DeviceMotionEvent) {
    alert("您的设备支持硬件调用");
} else {
    alert("您的设备不支持硬件调用");
}

2、绑定运动传感(devimotion)事件;

代码语言:javascript
复制
window.addEventListener('devicemotion', deviceMotionHandler, false);

3、根据devimotion事件对象,获取三个方向的重力加速度;

代码语言:javascript
复制
/*
* [deviceMotionHandler 摇一摇处理函数]
* @param {[type]} eventData [事件对象]
* @return {[type]} [无返回值]
* @author 刘国利、陈能堡、HTML5学堂
*/
function deviceMotionHandler(eventData){
    // acceleration加速度
    var acceleration = eventData.accelerationIncludingGravity;
    $(".wrap")[0].innerHTML = acceleration.x + " " + acceleration.y + " " + acceleration.z;
}

4、为了防止系统认为简单的变化也是在摇动手机,所以在每隔一段时间进行三个方向值的计算;

代码语言:javascript
复制
// 获取当前时间
curTime = new Date().getTime();
if (curTime - lastTime > 100) {
    // 计算出时间断
    diffTime = curTime - lastTime;
    // 记录上一次的时间
    lastTime = curTime;
 
    // 获取当前的三个方向的值
    x = acceleration.x;
    y = acceleration.y;
    z = acceleration.z;
 
    // 计算速度,为了防止出现负数,进行绝对值
    speed = Math.abs((x + y + z - lastX - lastY - lastZ) / diffTime * 10000);
 
    // 记录上一次三个方向的值
    lastX = x;
    lastY = y;
    lastZ = z;
};

5、当计算的该值大于预定的值(阀值),执行相应的操作。

代码语言:javascript
复制
if (speed > SHAKE_THRESHOLD) {
    alert("实现了摇一摇");
};

图片来源于网络

完整的实例

代码语言:javascript
复制
var con = document.getElementById("con");
 
(function(){
    // 监听运动传感事件,查看是否支持硬件运动
    if (window.DeviceMotionEvent) {
        window.addEventListener('devicemotion', deviceMotionHandler, false);
    } else {
        alert("您的设备不支持硬件调用");
    }
 
    // 变量初始化
    var x = 0,
     y = 0,
     z = 0,
    lastX = 0,
    lastY = 0,
    lastZ = 0,
curTime = 0,
lastTime = 0,
diffTime = 0,
    speed = 0;
 
    // 设置一个阀值
    var SHAKE_THRESHOLD = 800; // 设定摇晃的阈值为600 运行相应操作
 
    /*
     * 功能:测算三个方向重力加速度,达到一定值进行相应操作
     * 作者:HTML5学堂、刘国利、陈能堡
     *
     */
    function deviceMotionHandler(eventData){
        var acceleration = eventData.accelerationIncludingGravity;
 
        // 获取当前时间
        curTime = new Date().getTime();
        // 计算时间差,当这个差值大于一定值执行计算三个方向的速度
        if ((curTime - lastTime) > 100) {
            // 记录上一次的时间
            diffTime = curTime - lastTime;
            lastTime = curTime;
 
            // 获取当前三个方向的值
            x = acceleration.x;
            y = acceleration.y;
            z = acceleration.z;
 
            // 计算速度,为了防止出现负数,进行绝对值
            speed = Math.abs((x + y + z - lastX - lastY - lastZ) / diffTime * 8000);
            if (speed > SHAKE_THRESHOLD) {
                alert("我实现摇一摇了");
            };
 
            // 记录上一次三个方向的值
            lastX = x;
            lastY = y;
            lastZ = z;                    
        };
    }
})();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 懂点君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 手机摇一摇的实现思路:
    • 1、检测设备是否支持重力传感;
      • 2、绑定运动传感(devimotion)事件;
        • 3、根据devimotion事件对象,获取三个方向的重力加速度;
          • 4、为了防止系统认为简单的变化也是在摇动手机,所以在每隔一段时间进行三个方向值的计算;
            • 5、当计算的该值大于预定的值(阀值),执行相应的操作。
            • 完整的实例
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档