溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用HTML 5實現手機搖一搖功能

發(fā)布時間:2021-09-13 10:45:52 來源:億速云 閱讀:119 作者:柒染 欄目:web開發(fā)

如何使用HTML 5實現手機搖一搖功能,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

deviceOrientation:封裝了方向傳感器數據的事件,可以獲取手機靜止狀態(tài)下的方向數據,例如手機所處角度、方位、朝向等。

deviceMotion:封裝了運動傳感器數據的事件,可以獲取手機運動狀態(tài)下的運動加速度等數據。

使用它我們能夠很容易的實現重力感應、指南針等有趣的功能,在手機上將非常有用。

如何使用HTML 5實現手機搖一搖功能

用HTML5實現手機搖一搖的功能

其實它還能幫助我們在網頁上實現一個手機應用里非常常見而時尚的功能:手機搖一搖。

我最開始見到這個功能其實是在PhotoShake里,后來包括微信在內的許許多多、大大小小的應用都加入了這個功能。

如何使用HTML 5實現手機搖一搖功能

用HTML5實現手機搖一搖的功能

如果你曾經做過Android或者iOS開發(fā),對于這樣的功能可能非常了解。但是下面,我們將在Web上***實現這個功能。

讓我們趕快開始吧!

DeviceMotionEvent(設備運動事件)返回設備有關于加速度和旋轉的相關信息。加速度的數據將包含三個軸:x,y和z(示意如下圖所 示,x軸橫向貫穿手機屏幕或者筆記本鍵盤,y軸縱向貫穿手機屏幕或筆記本鍵盤,z軸垂直于手機屏幕或筆記本鍵盤)。因為有些設備可能沒有硬件來排除重力的 影響,該事件會返回兩個屬性,accelerationIncludingGravity(含重力的加速度)和acceleration(加速度),后者 排除了重力的影響。

如何使用HTML 5實現手機搖一搖功能

用HTML5實現手機搖一搖的功能

對于DeviceOrientation,HTML5Rocks上有一篇詳細的介紹文章《This End Up: Using Device Orientation》,很有參考價值。

我們先來監(jiān)聽運動傳感事件。

[javacript]  if (window.DeviceMotionEvent) {  window.addEventListener('devicemotion',deviceMotionHandler, false);  }  [/javascript]

然后獲取含重力的加速度。

[javacript]  function deviceMotionHandler(eventData) {  var acceleration =eventData.accelerationIncludingGravity;  }  [/javascript]

下面就涉及到我們如何計算用戶搖晃手機的原理了。考慮的要點如下:

1、  用戶大多時候都是以一個方向為主晃動手機來進行搖動;

2、  在晃動時三個方向的加速度數據必定都會變化;

3、  我們不能誤判手機正常的運動行為,想一想,如果你的手機放在褲兜里,走路時它也會有加速度數據變化。

綜上,我們應該針對三個方向的加速度進行計算,間隔測量它們,考察它們在固定時間段里的變化率,而且需要為它確定一個閾值來觸發(fā)動作。

我們需要定義幾個變量來記錄歷史x、y、z軸的數據以及上一次觸發(fā)的時間。核心方法實現代碼如下:

var SHAKE_THRESHOLD = xxx;    var last_update = 0;    var x, y, z, last_x, last_y, last_z;        function deviceMotionHandler(eventData) {    var acceleration =eventData.accelerationIncludingGravity;    var curTime = newDate().getTime();    if ((curTime - lastUpdate)> 100) {      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;        if (speed > SHAKE_THRESHOLD) {    alert("shaked!");    }    last_x = x;    last_y = y;    last_z = z;    }     }

由此我們完成了手機搖一搖的功能,是不是非常簡單?

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI