基于html5 DeviceOrientation 实现微信摇一摇功能


Posted in HTML / CSS onSeptember 25, 2015

在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态、加速度等数据(另还有deviceOrientation事件提供了设备角度、朝向等信息)。

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

运动事件监听

复制代码
代码如下:

if (window.DeviceMotionEvent) {
window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
alert('你的手机太差了,买个新的吧。');
}

获取加速度信息

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

复制代码
代码如下:

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;
}
}

效果如图所示:

基于html5 DeviceOrientation 实现微信摇一摇功能

HTML / CSS 相关文章推荐
CSS3实现王者荣耀匹配人员加载页面的方法
Apr 16 HTML / CSS
CSS3 实现弹跳的小球动画
Oct 26 HTML / CSS
详解HTML5 LocalStorage 本地存储
Dec 23 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
Oct 20 HTML / CSS
html5中JavaScript removeChild 删除所有节点
May 16 HTML / CSS
24个canvas基础知识小结
Dec 17 HTML / CSS
用html5绘制折线图的实例代码
Mar 25 HTML / CSS
h5调用摄像头的实现方法
Jun 01 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
Dec 29 HTML / CSS
使用HTML5 Geolocation实现一个距离追踪器
Apr 09 HTML / CSS
HTML5实现音频和视频嵌入的方法
Aug 22 HTML / CSS
AmazeUI 导航条的实现示例
Aug 14 HTML / CSS
简单介绍HTML5中audio标签的使用
Sep 24 #HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
Sep 21 #HTML / CSS
深入解析HTML5的IndexedDB索引数据库
Sep 14 #HTML / CSS
使用HTML5的表单验证的简单示例
Sep 09 #HTML / CSS
详解HTML5中的manifest缓存使用
Sep 09 #HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
Sep 08 #HTML / CSS
详解HTML5中ol标签的用法
Sep 08 #HTML / CSS
You might like
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
面向对象的javascript(笔记)
2009/10/06 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
Vue单文件组件基础模板小结
2017/08/10 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
python实现日常记账本小程序
2018/03/10 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
Python jieba库分词模式实例用法
2021/01/13 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
SQL Server面试题
2013/04/04 面试题
毕业生幼师求职自荐信
2013/10/01 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
求职简历中自我评价
2014/01/28 职场文书
财务会计专业自荐书
2014/06/30 职场文书
采购员岗位职责
2015/02/03 职场文书
2016国培研修心得体会
2016/01/08 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js