基于html5 DeviceOrientation 实现微信摇一摇功能_html5教程技巧
            
   
         
       2015-11-06 19:17:33
                [小 大]
                已经帮助:人解决问题                
                                
             
            
               微信摇一摇添加好久,很多朋友都在玩,那么基于html5 DeviceOrientation 如何实现微信摇一摇功能的呢?下面由脚本之家小编把详细内容分享给大家,供大家参考。
 在HTML5中,DeviceOrientation特性所提供的DeviceMotion事件封装了设备的运动传感器时间,通过改时间可以获取设备的运动状态、加速度等数据(另还有deviceOrientation事件提供了设备角度、朝向等信息)。DL6HTML5中文学习网 - HTML5先行者学习网
而通过DeviceMotion对设备运动状态的判断,则可以帮助我们在网页上就实现“摇一摇”的交互效果。DL6HTML5中文学习网 - HTML5先行者学习网
运动事件监听DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网
if (window.DeviceMotionEvent) {DL6HTML5中文学习网 - HTML5先行者学习网
    window.addEventListener('devicemotion', deviceMotionHandler, false);DL6HTML5中文学习网 - HTML5先行者学习网
} else {DL6HTML5中文学习网 - HTML5先行者学习网
    alert('你的手机太差了,买个新的吧。');DL6HTML5中文学习网 - HTML5先行者学习网
}DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网获取加速度信息DL6HTML5中文学习网 - HTML5先行者学习网
“摇一摇”的动作既“一定时间内设备了一定距离”,因此通过监听上一步获取到的x, y, z 值在一定时间范围内的变化率,即可进行设备是否有进行晃动的判断。而为了防止正常移动的误判,需要给该变化率设置一个合适的临界值。DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网
 function deviceMotionHandler(eventData) {DL6HTML5中文学习网 - HTML5先行者学习网
        var acceleration = eventData.accelerationIncludingGravity;DL6HTML5中文学习网 - HTML5先行者学习网
        var curTime = new Date().getTime();DL6HTML5中文学习网 - HTML5先行者学习网
        if ((curTime - last_update) > 100) {DL6HTML5中文学习网 - HTML5先行者学习网
            var diffTime = curTime - last_update;DL6HTML5中文学习网 - HTML5先行者学习网
            last_update = curTime;DL6HTML5中文学习网 - HTML5先行者学习网
            x = acceleration.x;DL6HTML5中文学习网 - HTML5先行者学习网
            y = acceleration.y;DL6HTML5中文学习网 - HTML5先行者学习网
            z = acceleration.z;DL6HTML5中文学习网 - HTML5先行者学习网
            var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;DL6HTML5中文学习网 - HTML5先行者学习网
            var status = document.getElementById("status");DL6HTML5中文学习网 - HTML5先行者学习网
            if (speed > SHAKE_THRESHOLD) {DL6HTML5中文学习网 - HTML5先行者学习网
                doResult();DL6HTML5中文学习网 - HTML5先行者学习网
            }DL6HTML5中文学习网 - HTML5先行者学习网
            last_x = x;DL6HTML5中文学习网 - HTML5先行者学习网
            last_y = y;DL6HTML5中文学习网 - HTML5先行者学习网
            last_z = z;DL6HTML5中文学习网 - HTML5先行者学习网
        }DL6HTML5中文学习网 - HTML5先行者学习网
    }DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网效果如图所示:DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网
DL6HTML5中文学习网 - HTML5先行者学习网