html5实现web app摇一摇换歌

摘要:
通过监控事件,可以获得静态手机的方向数据;通过监控事件,您可以获得手机在运动中的运动加速度数据;返回的设备有关于加速度和旋转的事件对象,放在口袋中的手机也会有加速度数据变化//定义抖动阈值varlastUpdate=0;

微信可以摇歌曲,根据声音识别出歌曲,然后返回歌曲信息,利用html5的deviceOrientation特性和deviceMotion事件也可以在web app上实现类似于微信摇一摇的功能,原生的app实现也有相关接口,这里只考虑web app的情况......

html5实现web app摇一摇换歌第1张

Section One

先来看下demo效果图:

html5实现web app摇一摇换歌第2张

测试地址:http://hcy2367.github.io/music/请在手机浏览器中打开该链接,建议WiFi下操作,否则一首歌几M的流量挺坑的,然后摇一摇换歌,操作可能会有点慢。

先来看下html5的这几个特性:

  • 1.deviceOrientation:方向传感器数据的事件,通过监听该事件可以获取手机静态状态下的方向数据;
  • 2.deviceMotion: 运动传感器数据事件,通过监听该事件可以获取手机运动状态下的运动加速度数据;
  • 3.DeviceMotionEvent: 判断浏览器是否支持该事件属性,如果支持则监听deviceMotion事件,返回设备有关于加速度和旋转的事件对象,该对象包含两个属性,accelerationIncludingGravity(含重力的加速度)和acceleration(加速度),后者排除了重力的影响。其中加速度的数据包含三个轴:x,y和z。

Section Two

如何判断用户摇晃了手机?考虑的要点如下: 1、用户大多时候都是以一个方向为主晃动手机来进行摇动; 2、在晃动时三个方向的加速度数据必定都会变化; 3、我们不能误判手机正常的运动行为,例如我们在走路时,放在裤兜里的手机也会有加速度数据变化。 综上,我们应该针对三个方向的加速度进行计算,间隔测量它们,考察它们在固定时间段里的变化率,而且需要为它确定一个阈值来触发动作。

代码如下:

var shakeThreshold = 1000; // 定义一个摇动的阈值
    var lastUpdate = 0; // 记录上一次摇动的时间
    var x, y, z, lastX, lastY, lastZ; // 定义x、y、z记录三个轴的数据以及上一次触发的数据

// 监听传感器运动事件
if (window.DeviceMotionEvent) {
    window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
    alert('本设备不支持devicemotion事件');
}

// 运动传感器处理
function deviceMotionHandler(eventData) {
    var acceleration = eventData.accelerationIncludingGravity; // 获取含重力的加速度
    var curTime = new Date().getTime();

    // 100毫秒进行一次位置判断
    if ((curTime - lastUpdate) > 100) {

        var diffTime = curTime - lastUpdate;
        lastUpdate = curTime;

        x = acceleration.x;
        y = acceleration.y;
        z = acceleration.z;

        var speed = Math.abs(x + y + z - lastX - lastY - lastZ) / diffTime * 10000;
        // 前后x, y, z间的差值的绝对值和时间比率超过了预设的阈值,则判断设备进行了摇晃操作
        if (speed > shakeThreshold) {
            doSomething();
        }

        lastX = x;
        lastY = y;
        lastZ = z;
    }
}

Last

其实web app的单页应用已经很广泛了,开发成本低,phonegap也可以在webview层通过这种方式实现摇一摇功能,然后打包成平台的app。另外也可以利用navigator.accelerometer加速器插件实现摇一摇的功能,实际上是通过js去实现本地的接口,实现跨平台,但这种方式没原生提供的api强大,html5 will play a important role in the future!

你若安好,便是晴天!

免责声明:文章转载自《html5实现web app摇一摇换歌》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c/s架构nginx+php-fpm通信原理[翻译]——MySQL Server Variable: sync_binlog (Doc ID 1501926.1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

积少成多Flash(7) ActionScript 3.0 交互之鼠标事件和键盘事件

[索引页][源码下载]积少成多Flash(7) - ActionScript 3.0 交互之鼠标事件和键盘事件 作者:webabcd介绍演示使用 Flash ActionScript 3.0 来监听用户的键盘事件和鼠标事件,并对其作相应的处理 键盘事件 - 在 flash.events.KeyboardEvent 类下。只有两个事件类型 Keyboard...

生物数据库介绍——NCBI

NCBI(National Center for Biotechnology Information,美国国家生物技术信息中心)除了维护GenBank核酸序列数据库外,还提供数据分析和检索资源。NCBI资源包括Entrez、Entrez编程组件、MyNCBI、PubMed、PudMed Central、PubReader、Gene、the NCBI Tax...

OpenTelemetry架构介绍

OpenTelemetry: 经得起考验的工具 摘自:https://blog.newrelic.com/product-news/what-is-opentelemetry/ 目录 OpenTelemetry: 经得起考验的工具 什么是OpenTelemetry?术语 OpenTelemetry的好处 如何使用OpenTelemetry Op...

Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上

http://hi.baidu.com/hieda/blog/item/4a7f238220e256a60cf4d2c2.html 源文件作者:Clifford E. Cummings    (Sunburst Design, Inc.) 原标题:Nonblocking Assignments in Verilog Synthesis, Coding S...

阿里OneData构建数据指标体系

数据指标来辅助业务决策 GMV、日活用户、月活用户、PV、UV、页面停留时长 OneData指标规范 以维度建模作为理论基础,构建总线矩阵,定义业务域、数据域、业务过程、度量/原子指标、维度、维度属性、修饰词、修饰类型、时间周期、派生指标等。 业务域:比数据域更高维度的业务划分方法,适用于特别庞大的业务系统,且业务板块之间的指标或业务重叠性较小。例如...

mysql批量更新数据(性能优化) 第一种方式

   首先想到的是,一条一条更新的速度太慢了,然后就想批量更新,一次更新N条数据。实践是检验真理的唯一标准,不一会儿,代码就敲完了,重新试了一下,效果依旧不理想。啊哦,真是要崩溃!后面又想到了利用异步,我一下子开多个mysql连接,同时处理,可是依旧慢的一笔。然后就放弃了,更新的效率肯定是满足不了了。然后就想着绕弯子了,我新建一张表,把旧表数据取出来,处理...