基于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.0 图形构成实例练习二
Mar 19 HTML / CSS
浏览器实现移动端高性能css3动画(开启gpu加速)
Dec 23 HTML / CSS
css图标制作教程制作云图标
Jan 19 HTML / CSS
CSS3制作苹果风格键盘特效
Feb 26 HTML / CSS
CSS3 display知识详解
Nov 25 HTML / CSS
浅谈three.js中的needsUpdate的应用
Nov 12 HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
Jul 11 HTML / CSS
详解HTML5中表单验证的8种方法介绍
Dec 19 HTML / CSS
html2canvas把div保存图片高清图的方法示例
Mar 05 HTML / CSS
利用Storage Event实现页面间通信的示例代码
Jul 26 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
Aug 20 HTML / CSS
通过feDisplacementMap和feImage实现水波特效
Apr 24 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
JavaScript 加号(+)运算符号
2009/12/06 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
基于node实现websocket协议
2016/04/25 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
Javascript文本框脚本实现方法解析
2020/10/30 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
python编程实现希尔排序
2017/04/13 Python
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python远程视频监控程序的实例代码
2019/05/05 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
初中校园广播稿
2014/02/02 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
慰问信格式
2015/02/14 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
运动员入场前导词
2015/07/20 职场文书
表扬信范文
2019/04/22 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android