html5的摇一摇功能实现

鄙人在html5界混了这么久竟然没有做过摇一摇相关的东西,条件自然的屏蔽了这个属性,今天一哥们说起有这个方法,有种深深的痛,毅然决然先学习一下!一下是摇一摇实现的大致思路。

创新互联于2013年创立,是专业互联网技术服务公司,拥有项目网站建设、成都网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元新昌做网站,已为上家服务,为新昌各地企业和个人服务,联系电话:13518219792

创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为渌口企业提供专业的成都网站设计、成都做网站,渌口网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。

驿城网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

成都创新互联成都网站建设按需制作网站,是成都网站制作公司,为宴会酒店设计提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站营销推广热线:18982081108

湾里ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

公司主营业务:成都网站建设、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出裕华免费做网站回馈大家。

有了摇一摇,就可以做一些模拟原生的玩意了,现在的实现逻辑虽然木有办法调用系统的东西,但是多少能播放个音乐啥的。如果想实现震动一下的效果还是得利用js调用系统设备才行。

     以下是学习时看的文章,转载的内容:

文章原文地址:http://blog.csdn.net/hfahe/article/details/7516317

  在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持。这个特性包括两种事件:

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

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

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

       其实它还能帮助我们在网页上实现一个手机应用里非常常见而时尚的功能:手机摇一摇。

       我最开始见到这个功能其实是在PhotoShake里,后来包括微信在内的许许多多、大大小小的应用都加入了这个功能。

PhotoShake:照片摇一摇

       如果你曾经做过Android或者iOS开发,对于这样的功能可能非常了解。但是下面,我们将在Web上首次实现这个功能。

      让我们赶快开始吧!

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

       对于DeviceOrientation,HTML5Rocks上有一篇详细的介绍文章《This End Up: Using Device Orientation》,很有参考价值。

       我们先来监听运动传感事件。

[html] view plaincopy

1. if (window.DeviceMotionEvent) {  

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

3. }  

       然后获取含重力的加速度。

[html] view plaincopy

1. function deviceMotionHandler(eventData) {  

2.   var acceleration =eventData.accelerationIncludingGravity;  

3. }  

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

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

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

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

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

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

[html] view plaincopy

1. var SHAKE_THRESHOLD = xxx;  

2. var last_update = 0;  

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

4.    

5. function deviceMotionHandler(eventData) {  

6.   var acceleration =eventData.accelerationIncludingGravity;  

7.    

8.   var curTime = newDate().getTime();  

9.    

10.  if ((curTime - lastUpdate)> 100) {  

11.   

12.      var diffTime = curTime -last_update;  

13.      last_update = curTime;  

14.   

15.      x = acceleration.x;  

16.      y = acceleration.y;  

17.      z = acceleration.z;  

18.   

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

20.       

21.           if (speed > SHAKE_THRESHOLD) {  

22.                            alert("shaked!");  

23.      }  

24.      last_x = x;  

25.      last_y = y;  

26.      last_z = z;  

27.    }  

 

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

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

不多说直接上代码,

Javascript:

[javascript] view plaincopy

  1. var SHAKE_THRESHOLD = 3000;  

  2.         var last_update = 0;  

  3.         var x = y = z = last_x = last_y = last_z = 0;  

  4.         function init() {  

  5.             if (window.DeviceMotionEvent) {  

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

  7.             } else {  

  8.                 alert('not support mobile event');  

  9.             }  

  10.         }  

  11.         function deviceMotionHandler(eventData) {  

  12.             var acceleration = eventData.accelerationIncludingGravity;  

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

  14.             if ((curTime - last_update) > 100) {  

  15.                 var diffTime = curTime - last_update;  

  16.                 last_update = curTime;  

  17.                 x = acceleration.x;  

  18.                 y = acceleration.y;  

  19.                 z = acceleration.z;  

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

  21.   

  22.                 if (speed > SHAKE_THRESHOLD) {  

  23.                     alert("摇动了");  

  24.                     media.setAttribute("src", "http://211.148.5.228:8002/Pages/test/Kalimba.mp3");  

  25.                     media.load();  

  26.                     media.play();    

  27.                 }  

  28.                 last_x = x;  

  29.                 last_y = y;  

  30.                 last_z = z;  

  31.             }  

  32.         }  


Html:

[html] view plaincopy

  1.   

  2.   

  3.   

  4.   

  5.       

  6.       

  7.     摇一摇功能  

  8.       

  9.         //Javascript  

  10.       

  11.   

  12.   

  13. 用力摇一摇你手机

      

  14.   

  15.   

  16.   

  17.   


IOS 测试:Safari 弹框\不播放音乐, Chroma 弹框\不播放音乐,UC弹框\不播放音乐

Andriod 测试:UC弹框\播放音乐,Chroma 弹框\播放音乐,内置浏览器 弹框\播放音乐


分享名称:html5的摇一摇功能实现
文章网址:http://scyanting.com/article/igchop.html