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);
}

具体效果扫一扫下方二维码

最新文章

  1. MFC-01-Chapter01:Hello,MFC---1.2 MFC简介
  2. [解决方案] pythonchallenge level 2
  3. 设为首页 添加到收藏夹 (share)
  4. [LeetCode]447 Number of Boomerangs
  5. September 1st 2016 Week 36th Thursday
  6. SqlServer常用语句参考
  7. 合金装备V 幻痛 制作技术特辑
  8. python linux 磁盘操作
  9. javascript输出图的简单路径
  10. 新浪SAE使用Thinkphp框架,禁用memcache节省豆子的方法
  11. UVa 1646 (递推 JAVA大数) Edge Case
  12. jqGrid 学习
  13. AVL树的插入删除查找算法实现和分析-1
  14. EXTJS4两个ComboBox的数据源联动,解决遇到第二个ComboBox第二次以后显示忙的状态问题
  15. Mac OS10.11更新ruby,gem,安装cocoapods
  16. Docker----起步(2)----在Ubuntu上安装最新版的Docker CE
  17. Echo团队Alpha冲刺随笔 - 第五天
  18. python之路--线程的其他方法
  19. 【BZOJ1818】[CQOI2010]内部白点(树状数组,扫描线)
  20. Photoshop去图片水印——适用复杂图片上有水印

热门文章

  1. 异或之(bzoj 3689)
  2. iOS之tabBar随tableView的滑动而隐藏/显现
  3. 会话控制:Cookie和session
  4. 教你分分钟开发一个属于自己的python模块(一)——能够直接在浏览器打印的方法
  5. 51nod1228 序列求和(自然数幂和)
  6. js常见报错之Unexpected token in JSON at position
  7. RUDP之一 —— UDP VS TCP
  8. 【转】有关Oracle随机字符串的生成方法及具体应用
  9. html和css书写规范
  10. Javascript并发模型和事件循环