1. 程式人生 > >H5+js實現搖晃手機,手機震動

H5+js實現搖晃手機,手機震動

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

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

2、 deviceMotion:封裝了運動感測器資料的事件,可以獲取手機運動狀態下的運動加速度等資料。 使用它我們能夠很容易的實現重力感應、指南針等有趣的功能,在手機上將非常有用。例如Opera H5體驗版裡的重力感應球示例就是通過監聽DeviceOrientation API的deviceOrientation事件來實現的。 其實它還能幫助我們在網頁上實現一個手機應用裡非常常見而時尚的功能:手機搖一搖。

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

<!DOCTYPE html>
<html>
<head>

    <title></title
>
</head> <body> <div>搖晃手機,手機震動</div> </body> <script type="text/javascript"> //運動事件監聽 if (window.DeviceMotionEvent) { window.addEventListener('devicemotion',deviceMotionHandler,false); } //獲取加速度資訊 //通過監聽上一步獲取到的x, y, z 值在一定時間範圍內的變化率,進行裝置是否有進行晃動的判斷。 //而為了防止正常移動的誤判,需要給該變化率設定一個合適的臨界值。
var SHAKE_THRESHOLD = 4000; 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) { vibration(); // Do something } last_x = x; last_y = y; last_z = z; } } function vibration(){ navigator.vibrate = navigator.vibrate || navigator.webkitVibrate || navigator.mozVibrate || navigator.msVibrate; if (navigator.vibrate) { // 支援 console.log("支援裝置震動!"); } //中括號裡面的值標示[震動時間,停止時間,震動時間,停止時間………..]。沒有錯就是這種規律,簡單明瞭 navigator.vibrate([500, 300, 400,300]); }
</script> </html>

相關推薦

H5+js實現搖晃手機手機震動

HTML5一個重要特性就是DeviceOrientation,它將底層的方向感測器和運動感測器進行了高階封裝,提供了DOM事件的支援。這個特性包括兩種事件: 1、 deviceOrientation:封裝了方向感測器資料的事件,可以獲取手機靜止狀態下的方向資料

原生js實現outerWidth()方法用到getComputedStyle

turn left func ltview wid nts dst fault 方法 function getTrueStyle(obj,attr){ if(obj.currentStyle){ //ie return obj.currentStyle[at

JS實現並集交集和差集

交集 clas 差集 log set nio bsp csdn 實現 var set1 = new Set([1,2,3]);var set2 = new Set([2,3,4]); 並集let union = new Set([...set1, ...set2]); 交集

登陸一個系統時前端js實現的驗證記住密碼等功能

con hold div plain class submit nts 設置 發生 記住密碼部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta

關於js實現微信QQ微博分享的總結

直接 默認 總結 不可 功能 網頁分享 默認瀏覽器 跳轉 百度 2018年5月16日,今天搜索了有關js分享的功能,做個總結。 微信內瀏覽器 App(hybrid) UC,QQ瀏覽器 其他瀏覽器 微信 1 調用內置API可一鍵分享 2 引導使用自帶分享功

js實現蕨類植物葉子葉子分形圖形

doc ren pat fill ret () and .get AS 分形圖形很是奇妙,這裏展示的是蕨類植物葉子的分形圖形。 這裏使用Canvas 通過描點的方式來繪制圖形,先說一下原理: 先來個方程: 或許看完這個覺得很懵逼,這裏就不說這個方程怎麽計算了。由這個方程

Js實現抽獎轉盤和點選返回某個模組頂部的功能

最近寫了幾個轉盤抽獎的活動頁面: 1.設定旋轉的角度: HTML部分:轉盤程式碼: <div class="lottery"> <div class="lottery_box"> <di

線上選課案例—通過js實現全選全不選和多選效果。順便談談理解的半吊子flag這個變數

要點: 1.首先分為兩個業務邏輯的模組,首先 全選/取消全選 的按鈕會的選中的狀態或者沒有選中,他的返回值是Boolean型別,也就是說通過通過這個通過全選按鈕將其Boolean型別的值,通過迴圈賦值給全選框下面所有的單選按鈕 2.再單選按鈕執行之前,將所有的單選按鈕狀態做一次判斷,判斷是否

js實現快速排序二分查詢 (詳解一次學會)

js中幾大演算法,最近看到網上各路大神的解答,都蠻好的,自己也來玩一玩 一,快速排序 大致分三步: 在資料集之中,選擇一個元素作為"基準"(pivot)。 所有小於"基準"的元素,都移到"基準"的左邊;所有大於"基準"的元素,都移到"基準"的右邊。 對"基準"左邊和右邊的兩個子集,不斷重複

htmlcssjs實現音樂播放含音訊特效和歌詞

前端播放器樣例  有需要的小夥伴直接用就行:https://download.csdn.net/download/qq_34042417/10669205 實現思路: 1.載入完頁面後請求等到歌曲,歌詞檔案,要實現歌詞跟歌曲滾動則要求歌詞是lrc格式。 2.對歌詞處理,處理

用HTMLjs實現單選題多選題計分報題功能

現學現做,做一下記錄;採用外部js和css,有彈窗問候,姓名填寫,單選,多選計分,報出錯題; js部分: function greet() { var time=new Date().getHours(); if(time<12) alert("Good mor

高德地圖web js實現畫多邊形圓。判斷一個點是否在多邊形或圓裡

<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge">

js實現遞迴尾遞迴(遞迴優化)防止棧溢位

一、一版的遞迴實現 n!,比如 5!= 5 * 4 * 3 * 2 *1       function fact(n) {             if(n == 1) {

html5+css+js實現動畫特效人物動畫

// 動畫結束事件        var animationEnd = (function() {            var explorer = navigator.userAgent;            if (~explorer.indexOf('WebKit')) {            

Jquery、Js實現網頁列印及列印樣式的自定義

<!DOCTYPE html> <html lang="en" style="height: 100%"> <head> <meta charset="UTF-8"> <title>Title</title> &

使用textSearch.js實現關鍵詞搜尋並搜尋結果高亮顯示

引用塊內容 今天我們介紹的這個外掛來著http://www.zhangxinxu.com/wordpress/,張鑫旭的文章寫得挺好的,大家有興趣的多看看。 我們今天的這個外掛叫“jq

JS 實現MD5加密以及發現的JS對字元的處理、替換等

        在實際開發工作中,用到介面開發,報文采用的是MD5加密方式,自己想做一個html的靜態頁面來實現報文的封裝和加密,在這個過程中就發現了js對雙引號“"”的處理不像看上去那麼簡單了。還有js替換字串的方法。 js實現MD5加密: <body>

js實現批量刪除編輯操作

批量刪除 1. js  <script type="text/javascript" src="../static/js/jQuery1.8.2.js"></script> <script type="text/javascript">

JS實現複製功能相容各大主流瀏覽器複製神器 ZeroClipboard

以下是完整版程式碼: <!DOCTYPE html> <html> <head> <title>Zero Clipboard 測試</title> <meta charset="utf-8"> <

js實現全選全不選反選批量刪除等(Yii)

效果展示: 程式碼實現: <?php  header("content-type:text/html;charset=utf-8");  use yii\helpers\Html;  u