欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS實(shí)現(xiàn)微信搖一搖原理解析

 更新時(shí)間:2017年07月22日 09:09:22   作者:motokay  
這篇文章主要為大家詳細(xì)介紹了JS微信搖一搖的實(shí)現(xiàn)原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了JS實(shí)現(xiàn)微信搖一搖的原理,供大家參考,具體內(nèi)容如下

實(shí)現(xiàn)原理:

1.微信搖一搖事件需要有硬件支撐,必須要求手機(jī)中有陀螺儀
2.在JS中給window添加ondevectionmotion事件。該事件在手機(jī)晃動(dòng),即手機(jī)中的陀螺儀發(fā)生旋轉(zhuǎn),該事件會觸發(fā)
3.觸發(fā)ondevectionmotion事件,會產(chǎn)生一個(gè)事件對象,通過該對象中的鍵值(accelerationIncludingGravity)來獲得該重力加速器對象
4.重力加速器對象中含有陀螺儀的坐標(biāo),通過重力加速器對象.x - .y - .z 獲取陀螺儀當(dāng)前的坐標(biāo)

<!DOCTYPE html> 
<html> 
 <head> 
  <meta charset="UTF-8"> 
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> 
  <title>微信搖一搖</title> 
 </head> 
 <body> 
  <!--請搖一搖--> 
 </body> 
 <script type="text/javascript"> 
  function randomNum(m,n){ 
   return Math.floor(Math.random(n - m + 1) + m); 
  } 
  //cover設(shè)置背景尺寸 
  //將背景圖按所在標(biāo)簽的寬高,縮放 
  document.body.style.backgroundSize = "cover"; 
  //設(shè)置body的背景圖 
  document.body.style.backgroundImage = "url(img/bg.jpg)" ; 
  //事件設(shè)備:觸發(fā)該事件需要硬件支持 
  //搖一搖功能: 
  //1.手機(jī)中的陀螺儀加速兩次 加速器的差值當(dāng)達(dá)到某個(gè)值時(shí),則認(rèn)為是手機(jī)晃動(dòng)事件 
  //2.設(shè)置手機(jī)晃動(dòng)事件前,獲取加速器的值 
  //3.添加手機(jī)晃動(dòng)事件;     
  //獲取手機(jī)晃動(dòng)前加速器的值,創(chuàng)建一個(gè)對象獲取 
  var currentValue = { 
   x : 0, 
   y : 0, 
   z : 0 
  }; 
  //獲取手機(jī)晃動(dòng)之后加速器的值,創(chuàng)建一個(gè)對象獲取 
  var lastValue = { 
   x : 0, 
   y : 0, 
   z : 0 
  } 
  //設(shè)置晃動(dòng)的最小的距離,只有達(dá)到該距離時(shí),才執(zhí)行搖一搖事件 
  var minValue = 20; 
  //當(dāng)手機(jī)觸發(fā)搖一搖事件時(shí),我們得到此時(shí)的位置信息,存儲到一個(gè)p標(biāo)簽上 
  //理論上講:陀螺儀事件中的加速器是無法靜止的; 
  var p1 = document.createElement("p"); 
  //第一種方式: 
  var img1 = document.createElement("img"); 
  img1.style.width = "375px"; 
  img1.style.height = "560px"; 
  //手機(jī)晃動(dòng)事件 
  window.ondevicemotion = function(e){ 
   //獲取對象 
   var event1 = event || e; 
   //獲取加速器對象,為了獲取陀螺儀上的坐標(biāo)信息 
   var acceleration = event1.accelerationIncludingGravity; 
   //記錄當(dāng)前加速器的值 
   currentValue.x = acceleration.x; 
   currentValue.y = acceleration.y; 
   currentValue.z = acceleration.z; 
   //判斷微信搖一搖事件(手機(jī)是否晃動(dòng)) 
   if (Math.abs(currentValue.x - lastValue.x) >= minValue || Math.abs(currentValue.y - lastValue.y) > minValue || Math.abs(currentValue.z - lastValue.z) > minValue) { 
    //說明搖一搖事件觸發(fā) 
    //實(shí)現(xiàn)微信搖一搖,可以將搖一搖中的圖片,作為body的背景圖 
    //隨機(jī)一張圖片的下標(biāo)(1 - 5) 
    var ranN = randomNum(1,6); 
    //創(chuàng)一個(gè)定時(shí)器 
    var timer = setInterval(function(){ 
     ranN ++ 
     if (ranN == 6) { 
      ranN = 1; 
     } 
     //為當(dāng)前的body設(shè)置背景圖 
     //document.body.style.backgroundImage = "url(img/"+ranN+".jpg)"; 
     //為當(dāng)前img設(shè)置路徑 
     img1.src = "img/"+ranN+".jpg"; 
      
    },200); 
    //設(shè)置一個(gè)延時(shí)器,延時(shí)一段時(shí)間后消除延時(shí)器 
    setTimeout(function(){ 
     clearInterval(timer); 
    },1000); 
   } 
   //記錄最后的值(保存上一次晃動(dòng)事件中的加速器的值) 
   lastValue.x = currentValue.x; 
   lastValue.y = currentValue.y; 
   lastValue.z = currentValue.z; 
  } 
  document.body.appendChild(img1); 
 </script> 
</html> 

注意:該代碼中沒有上傳圖片,如需要運(yùn)行需要自己在代碼的同級目錄創(chuàng)建一個(gè)img文件夾,里面放上從1到6的后綴為.jpg的圖片

相關(guān)文章

  • JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】

    JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之原型模式,簡單描述了原型模式的概念、原理,并結(jié)合實(shí)例形式分析了ES5與ES6實(shí)現(xiàn)原型模式的相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • JavaScript變量or循環(huán)中的var和let詳解

    JavaScript變量or循環(huán)中的var和let詳解

    這篇文章主要介紹了JavaScript變量or循環(huán)中的var和let詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • 利用bootstrapValidator驗(yàn)證UEditor

    利用bootstrapValidator驗(yàn)證UEditor

    這篇文章主要為大家詳細(xì)介紹了利用bootstrapValidator驗(yàn)證UEditor,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 再談ie和firefox下的document.all屬性

    再談ie和firefox下的document.all屬性

    很多情況下,我們是使用document.all來判斷當(dāng)前瀏覽器是ie還是 Mozilla 。
    2009-10-10
  • asp批量修改記錄的代碼

    asp批量修改記錄的代碼

    asp 數(shù)組 批量修改記錄的實(shí)現(xiàn)代碼
    2008-06-06
  • layui 阻止圖片上傳的實(shí)例(before方法)

    layui 阻止圖片上傳的實(shí)例(before方法)

    今天小編就為大家分享一篇layui 阻止圖片上傳的實(shí)例(before方法),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Bootstrap3制作自己的導(dǎo)航欄

    Bootstrap3制作自己的導(dǎo)航欄

    這篇文章主要教會大家如何利用Bootstrap3制作自己的導(dǎo)航欄,設(shè)計(jì)自己喜歡的元素、樣式,感興趣的小伙伴們可以參考一下
    2016-05-05
  • es6中??與||區(qū)別小結(jié)

    es6中??與||區(qū)別小結(jié)

    本文主要介紹了es6中??與||區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • BootStrap實(shí)現(xiàn)手機(jī)端輪播圖左右滑動(dòng)事件

    BootStrap實(shí)現(xiàn)手機(jī)端輪播圖左右滑動(dòng)事件

    用bootstrap做出的項(xiàng)目輪播圖在手機(jī)端不能滑動(dòng),為此找了好多插件、框架。但是都不能和bootstrap良好的結(jié)合。經(jīng)過一番折騰終于找到了解決方法,下面小編通過本文給大家簡單介紹下
    2016-10-10
  • js跑馬燈代碼(自寫)

    js跑馬燈代碼(自寫)

    自己剛寫的一個(gè)小程序,寫得滿一般的,不過這個(gè)接口還成,感興趣的朋友可以參考下哈,希望對你學(xué)習(xí)js知識有所幫助
    2013-04-04

最新評論