Adobe Edge Animate --使用HTML5实现手机摇一摇功能

原文链接:http://www.cnblogs.com/adobeedge/p/Adobe_Edge_Shake.html

Adobe Edge Animate --使用HTML5实现手机摇一摇功能

版权声明:

本文版权属于 北京联友天下科技发展有限公司。

转载的时候请注明版权和原文地址。

HTML5的发展日新月异,其功能也越来越丰富和完善,比如12年HTML5可支持手机摇一摇功能,本文末尾将附上有关技术问题。现在我们将讲解如何在Edge中使用HTML5实现摇一摇功能。

首先,需要注意的是,并不是所有手机都支持HTML5的摇一摇功能,以下为目前适用范围:

1、  iOS系统(包括ipad,iphone),自带safari浏览器和chorme浏览器皆可识别

2、  Android系统,不识别,需要安装特定浏览器如oprea,chrome等对html5支持较好的浏览器。

成果图:

Adobe Edge Animate --使用HTML5实现手机摇一摇功能摇一摇播放动画Adobe Edge Animate --使用HTML5实现手机摇一摇功能

一、制作摇一摇画面

这个纯属个人喜好,各人可根据自身爱好设计相应的摇一摇画面,不过要注意带有提醒用户这是一个需要“shake”的画面即可。

制作完成后,在时间轴上找一个时间点(如0秒处),设定一个标签(如“start”)以便调用动画播放点。

 Adobe Edge Animate --使用HTML5实现手机摇一摇功能

二、制作摇一摇之后播放的动画

同样,可自主发挥,但是需要体现摇一摇已经起作用了。制作完动画或者相应的提示画面之后,在时间轴上另外一个时间点(如1秒处),设定一个标签(如“shake”)以便摇一摇之后调用这个动画播放。

 Adobe Edge Animate --使用HTML5实现手机摇一摇功能

三、添加摇一摇功能

在第一个标签(“start”)出,添加一个触发事件(trigger),添加支持手机摇一摇的javascript功能函数,添加事件监控函数,用于监控设备的运动状态,当设备有“晃动”时,调用自定义的函数。

 Adobe Edge Animate --使用HTML5实现手机摇一摇功能

在此需要注意的是,需要对设备的晃动状态做出一定的限制(或者说判定),由于正常使用过程中也会有晃动的状态出现,只有当晃动幅度等达到一定程度时,才判定为“摇一摇”,这时就调用sym.play(“shake”);播放摇一摇动画。以下为添加的摇一摇功能函数。

var SHAKE_THRESHOLD = 5000;

var last_update = 0;

var x, y, z, last_x = 0, last_y = 0, last_z = 0;

 

function deviceMotionHandler(eventData) {

         var acceleration =eventData.accelerationIncludingGravity;

         var curTime = new Date().getTime();

         if ((curTime-last_update)> 10) {

                   var diffTime = curTime -last_update;

                   last_update = curTime;

                   x = acceleration.x;

                   y = acceleration.y;

                   z = acceleration.z;

 

                   var speed = Math.abs(x +y + z - last_x - last_y - last_z) / diffTime * 10000;

                   if (speed > SHAKE_THRESHOLD) {

                            sym.play("shake");

                   }

                                     last_x = x;

                                     last_y = y;

                                     last_z = z;

                   }

}

if (window.DeviceMotionEvent) {

    window.addEventListener('devicemotion',deviceMotionHandler,false);

    } else {

    //document.getElementById("dmEvent").innerHTML = "Not supported on your device."

}

在末尾,添加sym.stop();函数,让动画停止播放。

到此,一个简易的摇一摇功能页面就实现了。

四、测试

测试可以用两种方法,第一种是通过服务器访问模式,第二种是通过编译成为app或apk方式安装到移动端。

1、  服务器访问

在个人电脑端,启用iis服务器,将edge发布出来的文件放置在服务器端目录,用手机访问即可;也可安装apache服务器,其他做法与iis一致。注意服务器需要做出相应的配置工作,具体参照网络上相关的介绍。

2、  编译为应用程序

将工程文件通过在电脑中ios或者android相关编译工具,编译成为应用程序,安装到移动端,即可直接打开体验摇一摇功能。

本文地址:http://www.cnblogs.com/adobeedge/p/Adobe_Edge_Shake.html

 

附:HTML5摇一摇的相关技术问题(文章来自网络技术爱好者)

HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持。这个特性包括两种事件:

1、 deviceOrientation:封装了方向传感器数据的事件,可以获取手机静止状态下的方向数据,例如手机所处角度、方位、朝向等。

2、 deviceMotion:封装了运动传感器数据的事件,可以获取手机运动状态下的运动加速度等数据。

使用它我们能够很容易的实现重力感应、指南针等有趣的功能,在手机上将非常有用。例如Opera H5体验版里的重力感应球示例就是通过监听DeviceOrientation API的deviceOrientation事件来实现的。

DeviceMotionEvent(设备运动事件)返回设备有关于加速度和旋转的相关信息。加速度的数据将包含三个轴:x,y和z(示意如下图所示,x轴横向贯穿手机屏幕或者笔记本键盘,y轴纵向贯穿手机屏幕或笔记本键盘,z轴垂直于手机屏幕或笔记本键盘)。因为有些设备可能没有硬件来排除重力的影响,该事件会返回两个属性,accelerationIncludingGravity(含重力的加速度)和acceleration(加速度),后者排除了重力的影响。

Adobe Edge Animate --使用HTML5实现手机摇一摇功能

监听运动传感事件:

    if (window.DeviceMotionEvent) {

    window.addEventListener(‘devicemotion’,deviceMotionHandler, false);

    }

获取含重力的加速度:

    function deviceMotionHandler(eventData) {

    var acceleration =eventData.accelerationIncludingGravity;

    }

下面就涉及到我们如何计算用户摇晃手机的原理了。考虑的要点如下:

1、 用户大多时候都是以一个方向为主晃动手机来进行摇动;

2、 在晃动时三个方向的加速度数据必定都会变化;

3、 我们不能误判手机正常的运动行为,想一想,如果你的手机放在裤兜里,走路时它也会有加速度数据变化。

综上,我们应该针对三个方向的加速度进行计算,间隔测量它们,考察它们在固定时间段里的变化率,而且需要为它确定一个阈值来触发动作。

我们需要定义几个变量来记录历史x、y、z轴的数据以及上一次触发的时间。核心方法实现代码如下:

    var SHAKE_THRESHOLD = xxx;

    var last_update = 0;

    var x, y, z, last_x, last_y, last_z;

    function deviceMotionHandler(eventData) {

    var acceleration =eventData.accelerationIncludingGravity;

    var curTime = newDate().getTime();

    if ((curTime – lastUpdate)> 100) {

     var diffTime = curTime -last_update;

     last_update = curTime;

    x = acceleration.x;

    y = acceleration.y;

    z = acceleration.z;

    var speed = Math.abs(x +y + z – last_x – last_y – last_z) / diffTime * 10000;

     if (speed > SHAKE_THRESHOLD) {

    alert(“shaked!”);

     }

    last_x = x;

     last_y = y;

    last_z = z;

     }

    }

 

转载于:https://www.cnblogs.com/adobeedge/p/Adobe_Edge_Shake.html

上一篇:Windows Server下Oracle数据库自动备份批处理脚本


下一篇:gulp 技巧