基于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实现的非常实用的鼠标悬停特效演示
Nov 05 HTML / CSS
CSS3中Animation属性的使用详解
Aug 06 HTML / CSS
Css3圆角边框制作代码
Nov 18 HTML / CSS
使用CSS3的ruby-position固定注音位置的用法示例
Jul 05 HTML / CSS
css3实现平移效果(transfrom:translate)的示例
Nov 13 HTML / CSS
HTML5移动开发图片压缩上传功能
Nov 09 HTML / CSS
html5 音乐播放器 audio 标签使用概述
Jul 15 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
Dec 20 HTML / CSS
详解html5 shiv.js和respond.min.js
Jan 24 HTML / CSS
HTML5自定义视频播放器源码
Jan 06 HTML / CSS
HTML5超文本标记语言的实现方法
Sep 24 HTML / CSS
CSS 左边固定宽右边自适应的6种方法
May 15 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
php获取域名的google收录示例
2014/03/24 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHP7多线程搭建教程
2017/04/21 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
使用python实现接口的方法
2017/07/07 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python+django加载静态网页模板解析
2017/12/12 Python
python之消除前缀重命名的方法
2018/10/21 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
个人简历中自我评价
2014/02/11 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
员工家属慰问信
2015/03/24 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android