Adobe Edge Animate --使用HTML5實現手機搖一搖功能


Adobe Edge Animate --使用HTML5實現手機搖一搖功能

版權聲明:

本文版權屬於 北京聯友天下科技發展有限公司。

轉載的時候請注明版權和原文地址。

HTML5的發展日新月異,其功能也越來越豐富和完善,比如12年HTML5可支持手機搖一搖功能,本文末尾將附上有關技術問題。現在我們將講解如何在Edge中使用HTML5實現搖一搖功能。

首先,需要注意的是,並不是所有手機都支持HTML5的搖一搖功能,以下為目前適用范圍:

1、  iOS系統(包括ipad,iphone),自帶safari瀏覽器和chorme瀏覽器皆可識別

2、  Android系統,不識別,需要安裝特定瀏覽器如oprea,chrome等對html5支持較好的瀏覽器。

成果圖:

搖一搖播放動畫

一、制作搖一搖畫面

這個純屬個人喜好,各人可根據自身愛好設計相應的搖一搖畫面,不過要注意帶有提醒用戶這是一個需要“shake”的畫面即可。

制作完成后,在時間軸上找一個時間點(如0秒處),設定一個標簽(如“start”)以便調用動畫播放點。

 

二、制作搖一搖之后播放的動畫

同樣,可自主發揮,但是需要體現搖一搖已經起作用了。制作完動畫或者相應的提示畫面之后,在時間軸上另外一個時間點(如1秒處),設定一個標簽(如“shake”)以便搖一搖之后調用這個動畫播放。

 

三、添加搖一搖功能

在第一個標簽(“start”)出,添加一個觸發事件(trigger),添加支持手機搖一搖的javascript功能函數,添加事件監控函數,用於監控設備的運動狀態,當設備有“晃動”時,調用自定義的函數。

 

在此需要注意的是,需要對設備的晃動狀態做出一定的限制(或者說判定),由於正常使用過程中也會有晃動的狀態出現,只有當晃動幅度等達到一定程度時,才判定為“搖一搖”,這時就調用sym.play(“shake”);播放搖一搖動畫。以下為添加的搖一搖功能函數。

var SHAKE_THRESHOLD = 5000;

var last_update = 0;

var x, y, z, last_x = 0, last_y = 0, last_z = 0;

 

function deviceMotionHandler(eventData) {

         var acceleration =eventData.accelerationIncludingGravity;

         var curTime = new Date().getTime();

         if ((curTime-last_update)> 10) {

                   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) {

                            sym.play("shake");

                   }

                                     last_x = x;

                                     last_y = y;

                                     last_z = z;

                   }

}

if (window.DeviceMotionEvent) {

    window.addEventListener('devicemotion',deviceMotionHandler,false);

    } else {

    //document.getElementById("dmEvent").innerHTML = "Not supported on your device."

}

在末尾,添加sym.stop();函數,讓動畫停止播放。

到此,一個簡易的搖一搖功能頁面就實現了。

四、測試

測試可以用兩種方法,第一種是通過服務器訪問模式,第二種是通過編譯成為app或apk方式安裝到移動端。

1、  服務器訪問

在個人電腦端,啟用iis服務器,將edge發布出來的文件放置在服務器端目錄,用手機訪問即可;也可安裝apache服務器,其他做法與iis一致。注意服務器需要做出相應的配置工作,具體參照網絡上相關的介紹。

2、  編譯為應用程序

將工程文件通過在電腦中ios或者android相關編譯工具,編譯成為應用程序,安裝到移動端,即可直接打開體驗搖一搖功能。

本文地址:http://www.cnblogs.com/adobeedge/p/Adobe_Edge_Shake.html

 

附:HTML5搖一搖的相關技術問題(文章來自網絡技術愛好者)

HTML5另外一個重要特性就是DeviceOrientation,它將底層的方向傳感器和運動傳感器進行了高級封裝,提供了DOM事件的支持。這個特性包括兩種事件:

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

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

使用它我們能夠很容易的實現重力感應、指南針等有趣的功能,在手機上將非常有用。例如Opera H5體驗版里的重力感應球示例就是通過監聽DeviceOrientation API的deviceOrientation事件來實現的。

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

監聽運動傳感事件:

    if (window.DeviceMotionEvent) {

    window.addEventListener(‘devicemotion’,deviceMotionHandler, false);

    }

獲取含重力的加速度:

    function deviceMotionHandler(eventData) {

    var acceleration =eventData.accelerationIncludingGravity;

    }

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

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

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

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

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

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

    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;

     }

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM