博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信页面监听摇一摇事件,并伴有音效
阅读量:5930 次
发布时间:2019-06-19

本文共 1905 字,大约阅读时间需要 6 分钟。

原文出处:

最近要写一个微信网页,需要监听手机摇动事件,并且伴随有声音

在HTML5,devicemotion事件deviceorientation特性的运动传感器的封装时间装置,你可以通过改变运动时间获取设备的状态,加速和其他数据(有另一个角度deviceorientation事件提供设备,定位等信息)。

<!--more-->

而通过DeviceMotion对设备运动状态的判断,则可以帮助我们在网页上就实现“摇一摇”的交互效果。

把监听事件绑定给 deviceMotionHandler

if (window.DeviceMotionEvent) {        window.addEventListener('devicemotion', deviceMotionHandler, false);    } else {        alert('本设备不支持devicemotion事件');    }    获取设备加速度信息 accelerationIncludingGravity        function deviceMotionHandler(eventData) {        var acceleration = eventData.accelerationIncludingGravity,        x, y, z;        x = acceleration.x;        y = acceleration.y;        z = acceleration.z;        document.getElementById("status").innerHTML = "x:"+x+"
y:"+y+"
z:"+z; }

“摇一摇”的动作既“一定时间内设备了一定距离”,因此通过监听上一步获取到的x, y, z 值在一定时间范围内 的变化率,即可进行设备是否有进行晃动的判断。而为了防止正常移动的误判,需要给该变化率设置一个合适的临界 值。

var SHAKE_THRESHOLD = 800;    var last_update = 0;    var x = y = z = last_x = last_y = last_z = 0;        if (window.DeviceMotionEvent) {        window.addEventListener('devicemotion', deviceMotionHandler, false);    } else {    alert('本设备不支持devicemotion事件');    }        function deviceMotionHandler(eventData) {        var acceleration = eventData.accelerationIncludingGravity;        var curTime = new Date().getTime();                if ((curTime - last_update) > 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;            var status = document.getElementById("status");                        if (speed > SHAKE_THRESHOLD) {                doResult();            }            last_x = x;            last_y = y;            last_z = z;        }    }

100毫秒进行一次位置判断,若前后x, y, z间的差值的绝对值和时间比率超过了预设的阈值,则判断设备进行 了摇晃操作。

下面是我改写的代码

转载地址:http://xtutx.baihongyu.com/

你可能感兴趣的文章
c++引用总结
查看>>
T - 阿牛的EOF牛肉串(第二季水)
查看>>
iOS开发小技巧--TableView中headerView的循环利用,以及自定义的headerView
查看>>
java向mysql插入数据乱码
查看>>
CSharpGL - Object Oriented OpenGL in C#
查看>>
【转载】ID3DXSPRITE接口简单使用
查看>>
在XML里的XSD和DTD以及standalone的使用2----具体使用详解
查看>>
常用Linux运维命令
查看>>
java 文件保存到本地
查看>>
异步数据库查询 Z
查看>>
EL表达式简介
查看>>
磁盘分区(20G升50G)
查看>>
Windows搭建测试RabbitMq遇到的问题
查看>>
分布式架构高可用架构篇_activemq高可用集群(zookeeper+leveldb)安装、配置、高可用测试...
查看>>
QT笔记之VS2012 TCP传送文件
查看>>
java批量插入数据进数据库中
查看>>
mysql无法启动ERROR! MySQL is running but PID file could not be found ?
查看>>
浅析Java.lang.ProcessBuilder类
查看>>
隐马尔科夫模型(hidden Markov model, HMM)
查看>>
Hibernate 中出现表名(XXX) is not mapped 问题
查看>>