摇钱树效果

$(function(){
    $('.t_back').click(function() {
        window.history.back();
    });
//    陀螺仪相关的变量
    var tl_flage=true;
//    重力感应器相关定义的变量
    var chaTime=5;
    var endTime,startTime,alpha,beta,gamma,delA,delB,delG,lastAcc;
    var zl_flage=true;
    //HTML5摇动API
    
    if(window.DeviceMotionEvent) {
        var SHAKE_THRESHOLD = 1200;
        var last_update = 0;
        var x, y, z, last_x, last_y, last_z;
        
        function deviceMotionHandler(eventData) {
            var acceleration = eventData.accelerationIncludingGravity;
            var curTime = new Date().getTime();
            if((curTime - last_update) > 300) {
                var diffTime = curTime - last_update;
                last_update = curTime;
                x = acceleration.x;
                y = acceleration.y;
                z = acceleration.z;
                var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
                $('.p2').html(speed);
                if(speed > SHAKE_THRESHOLD) {
                    if(tl_flage) {
                        $('.jl_box').fadeIn();
                        tl_flage = false;
                    }
                }
                last_x = x;
                last_y = y;
                last_z = z;
            }
        }; 
        window.addEventListener('devicemotion', deviceMotionHandler, false);
    }else if(window.DeviceOrientationEvent){
    //    重力感应api
        window.addEventListener('deviceorientation',function(e){
//            开始的时间
            startTime=new Date();
            if(!lastAcc) {
                lastAcc = e;
                delA = parseInt( Math.abs(180-Math.abs(e.alpha) ) );
                delB = parseInt( Math.abs(90-Math.abs(e.beta) ) );
                delG = parseInt( Math.abs(90-Math.abs(e.gamma) ) );
            }else{
        //        设备指示的方向
                alpha = e.alpha,
        //      设备绕x轴旋转的角度
                beta = e.beta,
        //         设备绕y轴旋转的角度
                gamma = e.gamma;
                delA = parseInt( Math.abs( Math.abs(180-Math.abs(e.alpha)) - Math.abs(180-Math.abs(lastAcc.alpha)) ) );
                delB = parseInt( Math.abs( Math.abs(90-Math.abs(e.beta)) - Math.abs(90-Math.abs(lastAcc.beta)) ) );
                delG = parseInt( Math.abs( Math.abs(90-Math.abs(e.gamma)) - Math.abs(90-Math.abs(lastAcc.gamma)) ) );
            };
//            摇动时间差小于3可以触发
            if(chaTime<3){
                if( (delA > 15 && delB > 15) || (delA > 15 && delG > 15) || (delB > 15 || delG > 15) ) {
                    if(zl_flage){
                        $('.jl_box').fadeIn();
                        zl_flage=false;
                    };
                };
            };
            lastAcc = e;
//            结束的时间
            endTime=new Date();
//            快速摇动才可以触发的时间差值;
            chaTime=endTime-startTime;
        });
    }else{
        alert("您的浏览器不支持陀螺仪和重力感应器");
    };

    $('.jl_box_con_btn').bind('click',function(){
        $('.jl_box').fadeOut();
        tl_flage=true;
        zl_flage=true;
    });
})

1、orientation是重力感应api,获得的值与角度有关。

alpha是手机放在桌子上转。表示设备沿z轴上的旋转角度,范围为0~360。

beta是表示设备在x轴上的旋转角度,范围为-180~180。它描述的是设备由前向后旋转的情况。

gamma表示设备在y轴上的旋转角度,范围为-90~90。它描述的是设备由左向右旋转的情况。

2、devicemotion是陀螺仪api,手机有陀螺仪才能用这个。

  • x: 西向东,x轴的位置变化。
  • y: 南向北,y轴的位置变化。
  • z: 垂直地面,z轴的位置变化。
posted @ 2018-01-11 10:06  盖大楼  阅读(198)  评论(0编辑  收藏  举报