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

版权声明:

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

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

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

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

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

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

成果图:

一、制作摇一摇画面

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

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

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

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

三、添加摇一摇功能

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

在此需要注意的是,需要对设备的晃动状态做出一定的限制(或者说判定),由于正常使用过程中也会有晃动的状态出现,只有当晃动幅度等达到一定程度时,才判定为“摇一摇”,这时就调用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(加速度),后者排除了重力的影响。

监听运动传感事件:

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;

}

}

Adobe Edge Animate --使用HTML5实现手机摇一摇功能的更多相关文章

  1. Adobe edge animate制作HTML5动画可视化工具(一)

    Edge Animate for mac是Adobe最新出品的制作HTML5动画的可视化工具,简单的可以理解为HTML5版本的Flash Pro.在之后的文章中,我会逐一的介绍这款新的HTML5动画神 ...

  2. adobe edge animate 和 adobe animate cc 有啥区别?

    经常有人问这两款软件的区别,每次都要打字好烦,特此总结发帖如下: 一.首先各自软件介绍 ①adobe edge animate 是adobe公司早期推出的一款网页互动工具.通过HTML+CSS+Jav ...

  3. Adobe Edge Animate CC 不再开发更新!

    Adobe Edge Animate CC停止开发更新! http://blogs.adobe.com/edge/2015/11/30/update-about-edge-tools-services ...

  4. Adobe Edge Animate –EdgeCommons Log和全局变量设置功能

    Adobe Edge Animate –EdgeCommons Log和全局变量设置功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 一.Log功能 当 ...

  5. Adobe Edge Animate –使用EdgeCommons加载和播放音频

    Adobe Edge Animate –使用EdgeCommons加载和播放音频 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在Edge中,可以new一 ...

  6. Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换

    Adobe Edge Animate –svg地图交互-精确的边缘及颜色置换 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 上一篇我们说到了使用jquer ...

  7. Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片

    Adobe Edge Animate –解决图形边缘精确检测问题-通过jquery加载svg图片 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在edge ...

  8. Adobe Edge Animate –修改Edge Commons Spotlight功能,使之能支持播放中国网站视频

    Adobe Edge Animate –修改Edge Commons Spotlight功能,使之能支持播放中国网站视频 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权 ...

  9. Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现

    Adobe Edge Animate –获取鼠标位置及跟随鼠标功能实现 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在网络上浏览有关Edge相关问题的时 ...

随机推荐

  1. 第二百四十六天 how can I 坚持

    领悟啊.好伤心啊. 到底应该是怎样的一个过程,才能得到想要的结果啊. 我不懂我自己.. 睡觉吧. 中午吃的米线. 好渴,晚上没喝水呢,活该.谁让你一直玩游戏. 睡觉了.弟弟回家了,过两天去烟台待一个月 ...

  2. MongoDB 字段增长

    MongoDB中存储的文档必须有一个"_id"键.这个键的值可以是任何类型的,默认是个ObjectId对象. ObjectId 是一个12字节 BSON 类型数据,有以下格式: 前 ...

  3. Gym 100818I Olympic Parade(位运算)

    Olympic Parade http://acm.hust.edu.cn/vjudge/contest/view.action?cid=101594#problem/I [题意]: 给出N个数,找出 ...

  4. HDU 5512 Pagodas (2015沈阳现场赛,找规律+gcd)

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  5. 关于mysql_fetch_****

    今天调试如下代码: mysql_select_db('content',$link);//选择数据库 mysql_query("set names utf8");//设置编码格式 ...

  6. TypeScript学习笔记(五):接口

    使用接口 在前面的笔记中我们知道可以使用Object Type来指定参数的属性,如下: function printLabel(labelledObj: {label: string}) { cons ...

  7. 【Java】多线程冲突解决——同步锁

       转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827547.html    解决并行冲突最有效的方法就是加同步锁,主要有以下几种方法:   1:动态方法 ...

  8. nginx缓存优先级(缓存问题者必看)

    接触nginx的兄弟或多或少都有遇到缓存问题,要么是nginx为什么不缓存,要么就是nginx缓存很快就失效等等问题,在网上找了一遍nginx缓存优先级的文章,大家可以参考下. 架构图client端  ...

  9. 如何克隆路由器MAC地址,怎么操作?

    路由器的“MAC地址克隆”的意思是: 不克隆时,从外网访问你的电脑,获得的MAC地址是路由器的mac地址. 克隆后,从外网访问你的电脑,获得的MAC地址是你电脑网卡的mac地址. 实用举例如下: 中国 ...

  10. iOS开发——数据持久化&本地数据的存储(使用NSCoder将对象保存到.plist文件)

    本地数据的存储(使用NSCoder将对象保存到.plist文件)   下面通过一个例子将联系人数据保存到沙盒的“documents”目录中.(联系人是一个数组集合,内部为自定义对象).   功能如下: ...