HTML5搖一搖(上)—如何判斷設備搖動
剛剛過去的一年里基于微信的H5營銷可謂是十分火爆,通過轉發朋友圈帶來的病毒式傳播效果相信大家都不太陌生吧,剛好最近農歷新年將至,我就拿一個“搖簽”的小例子來談一談HTML5中如何調用手機重力感應的接口
什么是重力感應
說到重力感應有一個東西不得不提,那就是就是陀螺儀,陀螺儀就是內部有一個陀螺,陀螺儀一旦開始旋轉,由于輪子的角動量,陀螺儀有抗拒方向改變的特性,它的軸由于陀螺效應始終與初始方向平行,這樣就可以通過與初始方向的偏差計算出實際方向。
手機中的方位軸
在Web應用中調用手機陀螺儀接口
具體實現搖一搖可以通過HTML5中的DeviceOrientationEvent或者DeviceMotionEvent,二者的區別在于DeviceOrientation只是判斷用戶設備的偏轉角度,而DeviceMotion則可以計算用戶手機移動的加速度
//搖一搖(使用DeviceOrientation事件, 本質是計算偏轉角)
if(window.DeviceOrientationEvent){
var lastAcc; // 用來存儲上一次的deviceorientation事件
$(window).on('deviceorientation', function(event) {
var delA = Math.abs(e.alpha - lastAcc.alpha); // alpha軸偏轉角
var delB = Math.abs(e.beta - lastAcc.beta); // beta軸偏轉角
var delG = Math.abs(e.gamma - lastAcc.gamma); // gamma軸偏轉角
if ( (delA > 15 && delB > 15) || (delA > 15 && delG > 15) || (delB > 15 || delG > 15)) {
// 用戶設備搖動了,觸發響應操作
// 此處的判斷依據是任意兩個軸篇轉角度大于15度
alert('搖了');
}
lastAcc = event; // 存儲上一次的event
});//搖一搖(使用DeviceMotion事件, 推薦,應為可以計算加速度)
if(window.DeviceMotionEvent) {
var speed = 25; // 用來判定的加速度閾值,太大了則很難觸發
var x, y, z, lastX, lastY, lastZ;
x = y = z = lastX = lastY = lastZ = 0;
window.addEventListener('devicemotion', function(event){
var acceleration = event.accelerationIncludingGravity;
x = acceleration.x;
y = acceleration.y;
if(Math.abs(x-lastX) > speed || Math.abs(y-lastY) > speed) {
// 用戶設備搖動了,觸發響應操作
// 此處的判斷依據是用戶設備的加速度大于我們設置的閾值
alert('搖了');
}
lastX = x;
lastY = y;
}, false);
} 搖一搖的代碼判斷邏輯
var isStarted = false; // 是否開始搖動
// 開始搖簽
function start() {
isStarted = true;
$('.qiancover').hide(); //把封面背景上的靜態簽筒隱藏
$('.decode').hide(); // 解簽頁面隱藏
$('.result').show(); // 把簽筒搖動的div顯示出來
// setTimeout(showDecode, 3000);
}
// 顯示正在解簽
function showDecode() {
$('.result').hide(); // 把簽筒搖動的div隱藏起來
$('.decode').show(); // 顯示正在解簽
setTimeout(jumpToDecode, 3000);
}
// 跳至簽文頁面
function jumpToDecode(){
var urls = ["#", "#"]; // 用來存簽文結果頁面
var jumpTo = urls[parseInt(Math.random() * urls.length)]; // 隨機跳轉至簽文結果頁面
window.location = jumpTo;
};
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!