基于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代码实现switch滑动开关按钮效果
Aug 30 HTML / CSS
CSS3实例分享--超炫checkbox复选框和radio单选框
Sep 01 HTML / CSS
CSS3的 fit-content实现水平居中
Sep 07 HTML / CSS
浅谈pc和移动端的响应式的使用
Jan 03 HTML / CSS
使用css如何制作时间ICON方法实践
Nov 12 HTML / CSS
html5 音乐播放器 audio 标签使用概述
Jul 15 HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 HTML / CSS
html5 datalist标签使用示例(自动完成组件)
May 04 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 HTML / CSS
深入理解HTML5定时器requestAnimationFrame的使用
Dec 12 HTML / CSS
解决HTML5中滚动到底部的事件问题
Aug 22 HTML / CSS
css3 选择器
May 11 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
JS运动特效之完美运动框架实例分析
2018/01/24 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
详解Vue底部导航栏组件
2019/05/02 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
Python异常处理总结
2014/08/15 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
银行员工职业规划范文
2014/01/21 职场文书
餐厅采购员岗位职责
2014/03/06 职场文书
机关办公室岗位职责
2014/04/16 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
毕业生求职信范文
2014/06/29 职场文书
建议书格式
2015/02/04 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
八年级作文之友情
2019/11/25 职场文书