HTML5 DeviceOrientation實(shí)現(xiàn)手機(jī)網(wǎng)站搖一搖功能代碼實(shí)例
來(lái)源:易賢網(wǎng) 閱讀:1019 次 日期:2016-07-09 11:33:30
溫馨提示:易賢網(wǎng)小編為您整理了“HTML5 DeviceOrientation實(shí)現(xiàn)手機(jī)網(wǎng)站搖一搖功能代碼實(shí)例”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了HTML5 DeviceOrientation實(shí)現(xiàn)手機(jī)網(wǎng)站搖一搖功能代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

介紹之前做兩個(gè)聲明:

以下代碼可以直接運(yùn)行,當(dāng)然你別忘了引用jQuery才行。

代碼如下:

<script>

// DeviceOrientation將底層的方向傳感器和運(yùn)動(dòng)傳感器進(jìn)行了高級(jí)封裝,提供了DOM事件的支持。

// 這個(gè)特性包括兩個(gè)事件:

// 1、deviceOrientation:封裝了方向傳感器數(shù)據(jù)的事件,可以獲取手機(jī)靜止?fàn)顟B(tài)下的方向數(shù)據(jù)(手機(jī)所處的角度、方位和朝向等)。

// 2、deviceMotion:封裝了運(yùn)動(dòng)傳感器的事件,可以獲取手機(jī)運(yùn)動(dòng)狀態(tài)下的運(yùn)動(dòng)加速度等數(shù)據(jù)。

// 使用這兩個(gè)事件,可以很能夠?qū)崿F(xiàn)重力感應(yīng)、指南針等有趣的功能。</p> <p>// 現(xiàn)在在很多Native應(yīng)用中有一個(gè)非常常見(jiàn)而時(shí)尚的功能 —— 搖一搖,搖一搖找人、搖一搖看新聞、搖一搖找金幣。。。

// 也許在android或者ios的客戶端上對(duì)這個(gè)功能你已經(jīng)很了解了,但是現(xiàn)在,我將告訴你如何在手機(jī)網(wǎng)頁(yè)上實(shí)現(xiàn)搖一搖的功能。</p> <p>// OK,那我們現(xiàn)在就開(kāi)始吧,嘿嘿~

// 先來(lái)讓我們了解一下設(shè)備運(yùn)動(dòng)事件 —— DeviceMotionEvent:返回設(shè)備關(guān)于加速度和旋轉(zhuǎn)的相關(guān)信息,其中加速度的數(shù)據(jù)包含以下三個(gè)方向:

// x:橫向貫穿手機(jī)屏幕;

// y:縱向貫穿手機(jī)屏幕;

// z:垂直手機(jī)屏幕。

// 鑒于有些設(shè)備沒(méi)有排除重力的影響,所以該事件會(huì)返回兩個(gè)屬性:

// 1、accelerationIncludingGravity(含重力的加速度)

// 2、acceleration(排除重力影響的加速度)</p> <p>// 作為碼農(nóng),上代碼才是最直接的,come on,代碼走起!</p> <p>// 首先在頁(yè)面上要監(jiān)聽(tīng)運(yùn)動(dòng)傳感事件 

function init(){

  if (window.DeviceMotionEvent) {

    // 移動(dòng)瀏覽器支持運(yùn)動(dòng)傳感事件

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

    $("#yaoyiyaoyes").show();

  } else{

    // 移動(dòng)瀏覽器不支持運(yùn)動(dòng)傳感事件

    $("#yaoyiyaono").show();

  } 

}</p> <p>// 那么,我們?nèi)绾斡?jì)算用戶是否是在搖動(dòng)手機(jī)呢?可以從以下幾點(diǎn)進(jìn)行考慮:

// 1、其實(shí)用戶在搖動(dòng)手機(jī)的時(shí)候始終都是以一個(gè)方向?yàn)橹鬟M(jìn)行搖動(dòng)的;

// 2、用戶在搖動(dòng)手機(jī)的時(shí)候在x、y、z三個(gè)方向都會(huì)有相應(yīng)的想速度的變化;

// 3、不能把用戶正常的手機(jī)運(yùn)動(dòng)行為當(dāng)做搖一搖(手機(jī)放在兜里,走路的時(shí)候也會(huì)有加速度的變化)。

// 從以上三點(diǎn)考慮,針對(duì)三個(gè)方向上的加速度進(jìn)行計(jì)算,間隔測(cè)量他們,考察他們?cè)诠潭〞r(shí)間段里的變化率,而且需要確定一個(gè)閥值來(lái)觸發(fā)搖一搖之后的操作。</p> <p>// 首先,定義一個(gè)搖動(dòng)的閥值

var SHAKE_THRESHOLD = 3000;

// 定義一個(gè)變量保存上次更新的時(shí)間

var last_update = 0;

// 緊接著定義x、y、z記錄三個(gè)軸的數(shù)據(jù)以及上一次出發(fā)的時(shí)間

var x;

var y;

var z;

var last_x;

var last_y;

var last_z;</p> <p>// 為了增加這個(gè)例子的一點(diǎn)無(wú)聊趣味性,增加一個(gè)計(jì)數(shù)器

var count = 0;</p> <p>function deviceMotionHandler(eventData) {

  // 獲取含重力的加速度

  var acceleration = eventData.accelerationIncludingGravity; </p> <p>  // 獲取當(dāng)前時(shí)間

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

  var diffTime = curTime -last_update;

  // 固定時(shí)間段

  if (diffTime > 100) {

    last_update = curTime; </p> <p>    x = acceleration.x; 

    y = acceleration.y; 

    z = acceleration.z; </p> <p>    var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; </p> <p>    if (speed > SHAKE_THRESHOLD) { 

      // TODO:在此處可以實(shí)現(xiàn)搖一搖之后所要進(jìn)行的數(shù)據(jù)邏輯操作

      count++;

      $("#yaoyiyaoyes").hide();

      $("#yaoyiyaoresult").show();

      $("#yaoyiyaoresult").html("搖你妹!第" + count + "個(gè)了!");

    }</p> <p>    last_x = x; 

    last_y = y; 

    last_z = z; 

  } 

</script>

<div id="yaoyiyaono" style="font-size:20px;margin:10px;line-height:35px;display:none;">

  兄弟,如果您看到了我,說(shuō)明您現(xiàn)在還不能搖,不是說(shuō)您沒(méi)有資格用我,而是:</br>

  1、如果您使用PC機(jī)的瀏覽器,那可就不對(duì)了,我只愛(ài)手機(jī)瀏覽器;</br>

  2、如果您是Android手機(jī),那不好意思告訴你,android自帶的瀏覽器拋棄了我,您可以用UCWeb、chrome等第三方瀏覽器;</br>

  3、如果您都不屬于以上兩種情況,那我只有告訴您:您改換手機(jī)啦?。?!</br>

</div>

<div id="yaoyiyaoyes" style="font-size:20px;margin:10px;line-height:50px;display:none;">

  兄弟,搖一個(gè)吧,說(shuō)不定有一個(gè)清純的妹子等著你呢!

</div>

<div id="yaoyiyaoresult" style="font-size:20px;margin:10px;line-height:50px;display:none;"></div>

<script>

$(document).ready(function(){

init();

});

</script>

更多信息請(qǐng)查看網(wǎng)頁(yè)制作
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!
相關(guān)閱讀網(wǎng)頁(yè)制作

2025國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)