HTML5摇一摇
方式一
(function(){
    /**
     * 摇一摇
     * @author rubekid
     */
    function Shake(options){
        this.init(options);
    }
    Shake.prototype = {
        init:function(options){
            this.options = options || {};
            if(!window.DeviceMotionEvent || !window.addEventListener){
                alert("该浏览器不支持摇一摇,请换个浏览器试试!");
                this.uninit = true;
                return false;
            }
            var threshold = options.threshold || 2000;
            var afterShake = options.afterShake;
            if(typeof afterShake != "function"){
                afterShake = function(speed, acceleration){};
            }
            var _this = this;
            var x=null, y=null, z=null,_x=null,_y=null,_z=null;
            var t=_t=(new Date()).getTime();
            this.deviceMotionHandler = function(event){
                t = (new Date()).getTime();
                var diffTime = t - _t;
                if(diffTime < 100){//取时间大于0.1秒的变化
                    return false;
                }
                var acceleration = event.accelerationIncludingGravity;
                x = acceleration.x;
                y = acceleration.y;
                z = acceleration.z;
                if(_x!==null && _y!==null && _z!==null){
                    var speed = Math.ceil( Math.abs(( x - _x) + ( y - _y) + ( z - _z )) / diffTime * 100 * 100 );
                    if(speed > threshold){
                        afterShake(speed, acceleration);
                    }
                }
                //保存上一次记录
                _x = x;
                _y = y;
                _z = z;
                _t = t;
            }
        },
        start:function(){
            if(this.uninit){
                return false;
            }
            window.addEventListener("devicemotion", this.deviceMotionHandler, false);
        },
        stop:function(){
            if(this.uninit){
                return false;
            }
            window.removeEventListener("devicemotion", this.deviceMotionHandler, false);
        }
    };
    window.Shake = Shake;
})();
准确计数
//摇动
var minY = 10000, maxY = 0;
var lastY = 0;
var maxSpeed = 0;
var counter = 0;
var shakeFlag = 0;
var shake = new Shake({
afterShake:function(speed, acc){
if(speed > maxSpeed){
maxSpeed = speed;
}
if(lastY > acc.y){
minY = acc.y;
shakeFlag = 1;
}
else{
if(shakeFlag){
shakeFlag = 0;
if(maxY - minY > 2 && maxSpeed > 2000){
submitFlag = true;
maxSpeed = 0;
counter ++;
submitCount(); try{
shakeSound.pause();
shakeSound.currentTime = 0;
shakeSound.play();
}
catch(e){}
}
}
maxY = acc.y;
}
lastY = acc.y;
}
});
方式二
(function(){
    /**
     * 摇一摇
     * @author rubekid
     */
    function Shake(options){
        this.init(options);
    }
    Shake.prototype = {
        init:function(options){
            this.options = options || {};
            if(!window.DeviceMotionEvent || !window.addEventListener){
                alert("该浏览器不支持摇一摇,请换个浏览器试试!");
                this.uninit = true;
                return false;
            }
            var afterShake = options.afterShake;
            if(typeof afterShake != "function"){
                afterShake = function(){};
            }
            var threshold = options.threshold || 0;
            var _this = this;
            var x=null, y=null, z=null,_x=null,_z=null,_y=null;
            var duration = 100;
            var t=_t=(new Date()).getTime();
            this.deviceMotionHandler = function(event){
                t = (new Date()).getTime();
                var diffTime = t - _t;
                if(diffTime < duration){//取时间大于0.1秒的变化
                    return false;
                }
                var acceleration = event.accelerationIncludingGravity;
                x = acceleration.x;
                y = acceleration.y;
                z = acceleration.z;
                if(_x!==null && _y!==null && _z!==null){
                    var xv = Math.abs( x - _x ) / diffTime * duration * duration,
                    yv = Math.abs( y - _y ) / diffTime * duration * duration,
                    zv = Math.abs( z - _z ) / diffTime * duration * duration;
                    if(xv > threshold && yv > threshold || yv > threshold && zv >threshold || xv > threshold && zv >threshold){
                        afterShake();
                    }
                }
                //保存上一次记录
                _x = x;
                _y = y;
                _z = z;
                _t = t;
            }
        },
        start:function(){
            if(this.uninit){
                return false;
            }
            window.addEventListener("devicemotion", this.deviceMotionHandler, false);
        },
        stop:function(){
            if(this.uninit){
                return false;
            }
            window.removeEventListener("devicemotion", this.deviceMotionHandler, false);
        }
    };
    window.Shake = Shake;
})();
HTML5摇一摇的更多相关文章
- HTML5实现摇一摇
		
一.原理: 利用devicemotion获取移动速度,得到device移动时相对之前某个时间的差值比 二.效果图: 三.源码: //先判断设备是否支持HTML5摇一摇功能 if (window.Dev ...
 - html5实现摇一摇功能
		
原理:使用DeviceMotion实现,关于DeviceMotion介绍可以查看 https://developer.mozilla.org/en-US/docs/Web/Reference/Even ...
 - html5实现微信摇一摇功能
		
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...
 - html5摇一摇[转]
		
写在前面 年底了,有些公司会出一个摇奖的活动,今天在家没事就搜了一下这方面的资料. 原文地址:http://www.cnblogs.com/waitingbar/p/4682215.html 测试 效 ...
 - 用HTML5实现手机摇一摇的功能(转)
		
在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持.这个特性包括两种事件: 1.devi ...
 - Adobe Edge Animate --使用HTML5实现手机摇一摇功能
		
Adobe Edge Animate --使用HTML5实现手机摇一摇功能 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. HTML5的发展日新月异,其功能 ...
 - js html5 仿微信摇一摇
		
看微信摇一摇之后忽然想知道他是怎么写的.于是就在网上查了一些资料,有些是借鉴别人的.大家共同学习啊 先放代码 <body onload="init()"> <p& ...
 - HTML5实现“摇一摇”效果
		
在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态.加速度等数据(另还有deviceOrientat ...
 - 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
		
我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...
 - 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
		
摇一摇JS脚本逻辑:接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下: if (win ...
 
随机推荐
- 跨控制器操作-thinkphp
			
用A函数 或者 $use=new IndexController(); A跨控制器 $data->A("Admin/Index")//admin下面的index控制器 $da ...
 - java获得系统当前日期
			
package com.web.test; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...
 - jquery学习 (3)文本框获取焦点之后变换样式
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - HTML&CSS基础学习笔记1.29-灵活地使用样式
			
灵活的使用样式 使用样式的感觉很棒吧! 刚我们使用的内联样式是给具体的标签加上样式,如果有多个标签的时候,我们用内联样式给标签加样式的时候就需要一个个的加过来,这样就很麻烦. 而如果我们使用内部样式表 ...
 - easyui tabs 真正刷新用法
			
//刷新当前标签Tabs function RefreshTab(currentTab) { var url = $(currentTab.panel('options')).attr('href') ...
 - sql中关于case  when的一个例子
			
SELECT rownum R, a.expert_id as USERID, a.expert_id as TYPE, b.type_desc as TYPE_DESC, a.sex as SEX, ...
 - HTTP 代理原理及实现
			
本文转载自 https://imququ.com/post/web-proxy.html HTTP 代理原理及实现(一) 文章目录 普通代理 隧道代理 Web 代理是一种存在于网络中间的实体,提供各式 ...
 - LINUX搭建SVN客户端和多个项目的权限分组管理
			
搭建SVN服务,有效的管理代码,以下三步可以快速搞定.1.安装 #yum install subversion 判断是否安装成功 1 #subversion -v svnserve, version ...
 - 转载——web前端相关资源总结
			
前端牛人博客:张克军.阮一峰.拔赤(李晶).拔赤(李晶)2.张鑫旭.梦想天空.阿当.泽飞.刘杰(嗷嗷).为之漫笔(李松峰).goddyzhao.hax的技术部落.周爱民.随网之舞.子鼠.司徒正美.ju ...
 - android开发--翻转闹铃(从制作到打包)
			
(转载请声明,文章原作地址http://blog.csdn.net/buptgshengod) 最近在家放假,一直想做一个手机应用,于是就自己动手做起来了.想到一个注意就是当闹铃响的时候翻转闹铃,声音 ...