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检测手机摇一摇的更多相关文章

  1. 如何用js检测手机是否安装某个app

    问题描述 如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场 解决方案 一 //html代码中 的 a 标签,以微信为例,默认的是调用weixin schem ...

  2. js检测手机类型(android,ios,blackberry,windows等)

    var isMobile = { Android: function() { return navigator.userAgent.match(/Android/i); }, BlackBerry: ...

  3. js检测手机上是否有此APP,有的话打开应用,没有的话跳转到appstore

    //html代码中 的 a 标签,以微信为例,默认的是调用weixin scheme,去打开本机的微信,如果没有则跳转到相应连接 <a href="weixin://" cl ...

  4. js实现手机摇一摇

    //手机摇一摇 ---------------------------------------------------------- init();var SHAKE_THRESHOLD = 3000 ...

  5. H5+JS实现手机摇一摇功能

    在做微信活动页面的时候,经常会需要实现手机摇一摇功能,比如“摇一摇,拿好礼”. 为了实现它,就需要用到HTML5的DeviceOrientation特性.它提供的DeviceMotion事件封装了设备 ...

  6. 通过手机Web实现手机摇一摇的功能

    经常我们玩微信都会用到查到附近的人,都是在app上实现手机摇一摇的功能.现在,我们将此技术搬移到手机web上,供大家学习,主要是用到HTML5的重要特性就是DeviceOrientation:官方文档 ...

  7. html5 DeviceOrientation来实现手机网站上的摇一摇功能

    原文地址:http://www.cootm.com/?p=706 从网上转载看到的,感觉不错,就转过来了,特此感谢 cnblogs 的 幸福2胖纸的码农生活,直接转载了,不要介意!呵呵 以下是转载内容 ...

  8. 监听手机晃动(摇一摇)SensorEventListener

    import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; ...

  9. 使用shake.js让你博客支持摇一摇

    大家好,又到了随机文章的时间,请使用手机打开演示站点,然后像摇妹子一样摇晃手机,你会发现非常牛逼的事情,炫酷吧.该功能已经集成在Oconnor1.8中.本文主要讲解这货的原理. 首先需要下载shake ...

随机推荐

  1. c/c++优化结构控制

    一.表达式优化--使用替换程序中的乘除法 c/c++中的加减运算效率远远高于乘除运算,由于移位指令的执行速度和乘除法差不多,所以可以使用移位的方式来替换程序中的乘除法.一个数向右移一位,等于该数乘以2 ...

  2. [Java基础] Java中List.remove报错UnsupportedOperationException

    Java中List.remove(removeRange,clear类似) 报出 UnsupportedOperationException 的错误.原来该List是一个AbstractList,不支 ...

  3. HTML:让表单、文本框只读,不可编辑的方法

    有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使<input type="text" name="input1" value=&qu ...

  4. SVM实现邮件分类

    首先学习一下svm分类的使用. 主要有以下步骤: Loading and Visualizing Dataj Training Linear SVM Implementing Gaussian Ker ...

  5. thinphp下拉获取更多瀑布流效果

    html页面 <body> <script type="text/javascript" src="jquery.min.js">< ...

  6. WPF程序在Windows 7下应用Windows 8主题

    这篇博客介绍如何在Windows 7下应用Windows 8的主题. 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同.这是为什么呢?WPF程序启动时会加载 ...

  7. 使用ajax.dll时js脚本错误-XXX未定义

    操作系统:Windows 7 IIS:7.5 ajax.dll现在用的比较少,但是以前的项目有这个,使用的时候很容易出现这个错误,因为总是会遗漏配置. 使用ajax.dll时,js脚本错误,无法调用后 ...

  8. SimpleDateFomat里面的parse方法的使用

    parse方法用于将字符串类型的日期/时间解析为Date类型.语法 public Date parse(参数) 要加上这句 throws ParseException或者:try{}catch(){} ...

  9. CSS3动画里的过渡效果

    过渡效果中有: 1平滑效果 2线性过渡 3由慢到快 4由快到慢 5慢-快-慢  等等 具体参考 w3chool 例如: <body> <div class="out&quo ...

  10. Educational Codeforces Round 16

    A. King Moves water.= =. #include <cstdio> ,,,,,-,-,-}; ,-,,,-,,,-,}; #define judge(x,y) x > ...