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. MAC 远程桌面链接 证书或链接无效

    RDC --> 首选项  -->  安全性 --> 勾选即使验证失败也要链接.   问题解决.

  2. Jquery点击本身,修改出本身之外的其他同级元素的样式

    1.引用Jquyer库 2.Jquery代码: <script type="text/javascript"> $(function () { slidColor('d ...

  3. 3.OGG函数

    1.COMPUTE     一般用来计算目标端和源段的字段值,使用这个函数计算出目标端对应列想要的值 Use the @COMPUTE function to return the value of ...

  4. AMD and CMD

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMDCMD 规范在这里:https://github.com/seajs/seajs/issues ...

  5. TMS 例子63 分组,子node

    procedure TForm1.InitGrid; begin advstringgrid1.Grouping.MergeHeader := true; //这个什么作用没有是 advstringg ...

  6. 洛谷 P1736 创意吃鱼法 Label:dp || 前缀和

    题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...

  7. 【JAVA】 Java 连接池的工作原理

    什么是连接?         连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“.         有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它 ...

  8. JavaScript第一天

    1.静态的网页技术和动态的网页技术 静态网页是相对于动态网页而言,是指没有后台数据库.不含程序和不可交互的网页.你编的是什么它显示的就是什么.不会有任何改变.静态网页相对更新起来比较麻烦,适用于一般更 ...

  9. css 图片内容在不同分辨率下居中显示(演示的图片宽度是1920px,当图片宽度大于显示屏的宽度时)

    1.img 图片内容在不同分辨率下居中显示(如果隐藏多余,在img外面套一个div  设定overflow: hidden.div的大小就是img显示区域的大小) <!DOCTYPE html& ...

  10. Android 双卡双待识别

    简介 Android双卡双待已经越来越普及了,解决双卡双待管理是广大手机开发人员必须得面对的问题,为实现Android平台的双卡双待操作,笔者研究了Android 应用层操作双卡双待的机制. 机制 获 ...