HTML5 实现手机摇一摇
时间:2022-05-04
本文章向大家介绍HTML5 实现手机摇一摇,主要内容包括手机摇一摇的实现思路:、2、绑定运动传感(devimotion)事件;、3、根据devimotion事件对象,获取三个方向的重力加速度;、4、为了防止系统认为简单的变化也是在摇动手机,所以在每隔一段时间进行三个方向值的计算;、5、当计算的该值大于预定的值(阀值),执行相应的操作。、完整的实例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
HTML5新增了一些JavaScript API接口,比如地理定位、重力感应等。今天主要介绍devicemotion事件(设备事件),它提供设备的加速信息,表示为定义在设备上的坐标系。其还提供了设备在坐标系中的自转速率。若可行的话,事件应该提供设备重心处的加速信息。本文给大家讲解了HTML5实现手机摇一摇的效果。
手机摇一摇的实现思路:
1、检测设备是否支持重力传感;
// 监听运动传感事件,查看是否支持硬件运动
if (window.DeviceMotionEvent) {
alert("您的设备支持硬件调用");
} else {
alert("您的设备不支持硬件调用");
}
2、绑定运动传感(devimotion)事件;
window.addEventListener('devicemotion', deviceMotionHandler, false);
3、根据devimotion事件对象,获取三个方向的重力加速度;
/*
* [deviceMotionHandler 摇一摇处理函数]
* @param {[type]} eventData [事件对象]
* @return {[type]} [无返回值]
* @author 刘国利、陈能堡、HTML5学堂
*/
function deviceMotionHandler(eventData){
// acceleration加速度
var acceleration = eventData.accelerationIncludingGravity;
$(".wrap")[0].innerHTML = acceleration.x + " " + acceleration.y + " " + acceleration.z;
}
4、为了防止系统认为简单的变化也是在摇动手机,所以在每隔一段时间进行三个方向值的计算;
// 获取当前时间
curTime = new Date().getTime();
if (curTime - lastTime > 100) {
// 计算出时间断
diffTime = curTime - lastTime;
// 记录上一次的时间
lastTime = curTime;
// 获取当前的三个方向的值
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
// 计算速度,为了防止出现负数,进行绝对值
speed = Math.abs((x + y + z - lastX - lastY - lastZ) / diffTime * 10000);
// 记录上一次三个方向的值
lastX = x;
lastY = y;
lastZ = z;
};
5、当计算的该值大于预定的值(阀值),执行相应的操作。
if (speed > SHAKE_THRESHOLD) {
alert("实现了摇一摇");
};
图片来源于网络
完整的实例
var con = document.getElementById("con");
(function(){
// 监听运动传感事件,查看是否支持硬件运动
if (window.DeviceMotionEvent) {
window.addEventListener('devicemotion', deviceMotionHandler, false);
} else {
alert("您的设备不支持硬件调用");
}
// 变量初始化
var x = 0,
y = 0,
z = 0,
lastX = 0,
lastY = 0,
lastZ = 0,
curTime = 0,
lastTime = 0,
diffTime = 0,
speed = 0;
// 设置一个阀值
var SHAKE_THRESHOLD = 800; // 设定摇晃的阈值为600 运行相应操作
/*
* 功能:测算三个方向重力加速度,达到一定值进行相应操作
* 作者:HTML5学堂、刘国利、陈能堡
*
*/
function deviceMotionHandler(eventData){
var acceleration = eventData.accelerationIncludingGravity;
// 获取当前时间
curTime = new Date().getTime();
// 计算时间差,当这个差值大于一定值执行计算三个方向的速度
if ((curTime - lastTime) > 100) {
// 记录上一次的时间
diffTime = curTime - lastTime;
lastTime = curTime;
// 获取当前三个方向的值
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
// 计算速度,为了防止出现负数,进行绝对值
speed = Math.abs((x + y + z - lastX - lastY - lastZ) / diffTime * 8000);
if (speed > SHAKE_THRESHOLD) {
alert("我实现摇一摇了");
};
// 记录上一次三个方向的值
lastX = x;
lastY = y;
lastZ = z;
};
}
})();
- (cljs/run-at (JSVM. :all) "Metadata就这样哦")
- (cljs/run-at (JSVM. :all) "细说函数")
- 动手写个数字输入框2:起手式——拦截非法字符
- Linux安装DNSmasq搭建自己的公共DNS
- (cljs/run-at (JSVM. :all) "一次说白DataType、Record和Protocol")
- 虚拟主机多域名转向
- .top域名名声大噪,这枚单字符10天建站上线!
- 编译期类型检查 in ClojureScript
- Chrome Extension in CLJS —— 搭建开发环境
- 双拼域名lanben.com以三万元成交
- 动手写个数字输入框3:痛点——输入法是个魔鬼
- Thinking in React Implemented by Reagent
- ssm整合Redis
- 前端魔法堂——调用栈,异常实例中的宝藏
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- 大话设计模式--第六章 装饰模式
- 大话设计模式--第七章 代理模式
- 数据库优化
- 获取jar包内部的资源文件
- Mac上sonar插件的安装及使用
- 一个ip, 两个域名, 两个ssl, 访问多个不同的项目
- 直接插入排序法——java语言实现
- Spring-boot构建多模块依赖工程时,maven打包异常:程序包xxx不存在
- spring boot使用注解的方式引入mybatis的SqlSessionDaoSupport
- 数据库优化 6. 启用MySQL查询缓存
- 正则表达式———通俗易懂———边讲解边举例
- git Lab ssh方式拉取代码失败
- 栈的应用之括号的匹配Java语言描述
- 第一个go程序
- go语言简单介绍,增强了解