<script> // DeviceOrientation將底層的方向傳感器和運動傳感器進行了高級封裝,提供了DOM事件的支持。 // 這個特性包括兩個事件: // 一、deviceOrientation:封裝了方向傳感器數據的事件,能夠獲取手機靜止狀態下的方向數據(手機所處的角度、方位和朝向等)。 // 二、deviceMotion:封裝了運動傳感器的事件,能夠獲取手機運動狀態下的運動加速度等數據。 // 使用這兩個事件,能夠很可以實現重力感應、指南針等有趣的功能。 // 如今在不少Native應用中有一個很是常見而時尚的功能 —— 搖一搖,搖一搖找人、搖一搖看新聞、搖一搖找金幣。。。 // 也許在android或者ios的客戶端上對這個功能你已經很瞭解了,可是如今,我將告訴你如何在手機網頁上實現搖一搖的功能。 // OK,那咱們如今就開始吧,嘿嘿~ // 先來讓咱們瞭解一下設備運動事件 —— DeviceMotionEvent:返回設備關於加速度和旋轉的相關信息,其中加速度的數據包含如下三個方向: // x:橫向貫穿手機屏幕; // y:縱向貫穿手機屏幕; // z:垂直手機屏幕。 // 鑑於有些設備沒有排除重力的影響,因此該事件會返回兩個屬性: // 一、accelerationIncludingGravity(含重力的加速度) // 二、acceleration(排除重力影響的加速度) // 做爲碼農,上代碼纔是最直接的,come on,代碼走起! // 首先在頁面上要監聽運動傳感事件 function init(){ if (window.DeviceMotionEvent) { // 移動瀏覽器支持運動傳感事件 window.addEventListener('devicemotion', deviceMotionHandler, false); $("#yaoyiyaoyes").show(); } else{ // 移動瀏覽器不支持運動傳感事件 $("#yaoyiyaono").show(); } } // 那麼,咱們如何計算用戶是不是在搖動手機呢?能夠從如下幾點進行考慮: // 一、其實用戶在搖動手機的時候始終都是以一個方向爲主進行搖動的; // 二、用戶在搖動手機的時候在x、y、z三個方向都會有相應的想速度的變化; // 三、不能把用戶正常的手機運動行爲當作搖一搖(手機放在兜裏,走路的時候也會有加速度的變化)。 // 從以上三點考慮,針對三個方向上的加速度進行計算,間隔測量他們,考察他們在固定時間段裏的變化率,並且須要肯定一個閥值來觸發搖一搖以後的操做。 // 首先,定義一個搖動的閥值 var SHAKE_THRESHOLD = 3000; // 定義一個變量保存上次更新的時間 var last_update = 0; // 緊接着定義x、y、z記錄三個軸的數據以及上一次出發的時間 var x; var y; var z; var last_x; var last_y; var last_z; // 爲了增長這個例子的一點無聊趣味性,增長一個計數器 var count = 0; function deviceMotionHandler(eventData) { // 獲取含重力的加速度 var acceleration = eventData.accelerationIncludingGravity; // 獲取當前時間 var curTime = new Date().getTime(); var diffTime = curTime -last_update; // 固定時間段 if (diffTime > 100) { 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) { // TODO:在此處能夠實現搖一搖以後所要進行的數據邏輯操做 count++; $("#yaoyiyaoyes").hide(); $("#yaoyiyaoresult").show(); $("#yaoyiyaoresult").html("搖你妹!第" + count + "個了!"); } last_x = x; last_y = y; last_z = z; } } </script> <div id="yaoyiyaono" style="font-size:20px;margin:10px;line-height:35px;display:none;"> 兄弟,若是您看到了我,說明您如今還不能搖,不是說您沒有資格用我,而是:</br> 一、若是您使用PC機的瀏覽器,那可就不對了,我只愛手機瀏覽器;</br> 二、若是您是Android手機,那很差意思告訴你,android自帶的瀏覽器拋棄了我,您能夠用UCWeb、chrome等第三方瀏覽器;</br> 三、若是您都不屬於以上兩種狀況,那我只有告訴您:您改換手機啦!!!</br> </div> <div id="yaoyiyaoyes" style="font-size:20px;margin:10px;line-height:50px;display:none;"> 兄弟,搖一個吧,說不定有一個清純的妹子等着你呢! </div> <div id="yaoyiyaoresult" style="font-size:20px;margin:10px;line-height:50px;display:none;"></div> <script> $(document).ready(function(){ init(); }); </script>