js检测手机摇一摇
1.检测设备是否支持重力感应事件deviceorientation
deviceorientation 提供设备的物理方向信息,表示为一系列本地坐标系的旋角
function motionHandler(event) {
accGravity = event.acceleration;
}
if (window.DeviceMotionEvent) {
window.addEventListener("devicemotion", motionHandler, false);
} else {
document.body.innerHTML = "What user agent u r using???";
}
简单的开始摇一摇
$(".start_btn").on("click", function () {
alert("开启摇一摇le");
window.addEventListener('devicemotion', deviceMotionHandler, false);
})
var speed = 20;//speed
var x = y = z = lastX = lastY = lastZ = 0;
function deviceMotionHandler(eventData) {
var acceleration = eventData.accelerationIncludingGravity;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
if (Math.abs(x - lastX) > speed || Math.abs(y - lastY) > speed || Math.abs(z - lastZ) > speed) {
//简单的摇一摇触发代码
alert(1);
$("body").prepend("<p>accelerationX:" + acceleration.x + "</p>");
$("body").prepend("<p>accelerationY:" + acceleration.y + "</p>");
$("body").prepend("<p>accelerationZ:" + acceleration.z + "</p>");
window.removeEventListener('devicemotion', deviceMotionHandler, false);
}
lastX = x;
lastY = y;
lastZ = z;
}
参考链接请扫一扫这里

适用场景:一次性或者多次性间断的摇一摇情况可以使用
其原理是通过对比xy或z的加速度和一个给定的值去比较。如何大于给定的值我们就认定他要过了。。
下面我们看一下,如何检测用户是在始终不停的摇没有停下来呢?
我们可以设置一个时间戳,每隔一段时间去检测一下xy或z的加速度,保证我们每次去检测的时候他的值都是大于一个给定的值,这样就能说明用户一直是出于摇动状态的。。但如果一直始终保持在摇动的状态,难度会比较大。。我们折中一点,去取平均值,
每个一段时间我记录一下摇动的某一坐标的加速度,然后把每一次记录的加速度值加起来去比记录的总次数。
检测是否开始摇
var setInterIsShake = setInterval(function () {
/************_ISshakespeed****************/
var _ISshakespeedX = accGravity.x;
_ISshakespeedX = Math.abs(_ISshakespeedX);
_iSshakeXnum++;
if (_iSshakeXnum < ) {
_iSshakeXnums.push(_ISshakespeedX);
} else {
_iSshakeXnum = ;
_iSshakeXnum_val =
$.each(_iSshakeXnums, function (i, n) {
_iSshakeX_val += n;
});
_iSshakeX_val = _iSshakeX_val / _iSshakeXnums.length
_iSshakeXnums = [];
//$(".debug_box").prepend("<p>_iSshakeX_val: " + _iSshakeX_val + "</p>");//调试0818
}
/****************************/
/************_ISshakespeed****************/
var _ISshakespeedY = accGravity.y;
_ISshakespeedY = Math.abs(_ISshakespeedY);
if (_iSshakeX_val >) {
// alert("开始摇了");
clearInterval(setIntervalTime2)
//有变化了开始加时间
_time += ;
}
}
/****************************/
}, );
检测是否持续摇
var _loopnum = 0;
var _loopnums = [];
var _loopnum_val = 0; function setIntervalTimeFun() {
var setIntervalTime = setInterval(function () { _time += 100; //x
var _shakespeed = accGravity.x; _shakespeed = Math.abs(_shakespeed); var _isstartskake = 0; _loopnum++;
if (_loopnum < 5) {
_loopnums.push(_shakespeed); } else {
_loopnum = 0; _loopnum_val = 0 $.each(_loopnums, function (i, n) { _loopnum_val += n; }); _loopnum_val = _loopnum_val / _loopnums.length
_loopnums = []; } _loopnum++;
if (_loopnum < 5) {
_loopnums.push(_shakespeed); } else {
_loopnum = 0; _loopnum_val = 0 $.each(_loopnums, function (i, n) { _loopnum_val += n; }); _loopnum_val = _loopnum_val / _loopnums.length
_loopnums = []; } if (_loopnum_val < 6 ) {-----中断持续摇动 // alert("小于6") clearInterval(setIntervalTime); _sec = _time / 1000; //开始抽奖
TestlotteryFun(_sec); } else {
//alert("都大于6")-----持续摇动中 // } } } }, 100);
}
具体效果扫一扫下方二维码

js检测手机摇一摇的更多相关文章
- 如何用js检测手机是否安装某个app
问题描述 如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场 解决方案 一 //html代码中 的 a 标签,以微信为例,默认的是调用weixin schem ...
- js检测手机类型(android,ios,blackberry,windows等)
var isMobile = { Android: function() { return navigator.userAgent.match(/Android/i); }, BlackBerry: ...
- js检测手机上是否有此APP,有的话打开应用,没有的话跳转到appstore
//html代码中 的 a 标签,以微信为例,默认的是调用weixin scheme,去打开本机的微信,如果没有则跳转到相应连接 <a href="weixin://" cl ...
- js实现手机摇一摇
//手机摇一摇 ---------------------------------------------------------- init();var SHAKE_THRESHOLD = 3000 ...
- H5+JS实现手机摇一摇功能
在做微信活动页面的时候,经常会需要实现手机摇一摇功能,比如“摇一摇,拿好礼”. 为了实现它,就需要用到HTML5的DeviceOrientation特性.它提供的DeviceMotion事件封装了设备 ...
- 通过手机Web实现手机摇一摇的功能
经常我们玩微信都会用到查到附近的人,都是在app上实现手机摇一摇的功能.现在,我们将此技术搬移到手机web上,供大家学习,主要是用到HTML5的重要特性就是DeviceOrientation:官方文档 ...
- html5 DeviceOrientation来实现手机网站上的摇一摇功能
原文地址:http://www.cootm.com/?p=706 从网上转载看到的,感觉不错,就转过来了,特此感谢 cnblogs 的 幸福2胖纸的码农生活,直接转载了,不要介意!呵呵 以下是转载内容 ...
- 监听手机晃动(摇一摇)SensorEventListener
import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; ...
- 使用shake.js让你博客支持摇一摇
大家好,又到了随机文章的时间,请使用手机打开演示站点,然后像摇妹子一样摇晃手机,你会发现非常牛逼的事情,炫酷吧.该功能已经集成在Oconnor1.8中.本文主要讲解这货的原理. 首先需要下载shake ...
随机推荐
- 【python】描述符descriptor
开始看官方文档,各种看不懂,只看到一句Properties, bound and unbound methods, static methods, and class methods are all ...
- 一些实用的Windows注册表
一些实用的Windows注册表 1.去掉快捷方式文件名后面自动添加的"-快捷方式" 在给某个文件创建快捷方式时(选中文件-->右键-->发送到-->桌面快捷方式) ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
- Python安装包或模块的多种方式汇总
windows下安装python第三方包.模块汇总如下(部分方式同样适用于其他平台): 1. windows下最常见的*.exe,*msi文件,直接运行安装即可: 2. 安装easy_install, ...
- linux内核打印数据到串口控制台,printk数据不打印问题
linux内核打印数据到串口控制台问题 原文来源:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.查看当前控制台的打印级别 cat /proc/sys/kern ...
- IIS服务器允许跨域配置
<configuration> <system.webServer> <httpProtocol> <customHeaders> <add na ...
- linux系统网址
主站:http://www.xitongzhijia.net/linux/ linux:http://www.xitongzhijia.net/linux/201603/69275.html (7.2 ...
- C# Questions
What's the difference between linkedlist and array? How do you implement linkedlist? What's the diff ...
- PHP中面向对象的关键字
php面向对象中常用的关键字有final.static.const (1)final: 1,final不能修饰成员属性 2,final只能修饰类和方法 作用: 使用final修饰的类不能被子类继承 使 ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...