1、獲取位置
HTML5地理位置API,允許js程式向瀏覽器詢問使用者的真實資訊,移動端使用GPS獲取的位置,非常精準。但是地理位置API的瀏覽器訪問前總是會詢問是否同意,如果同意的話就會獲取到位置,否則獲取不到。
geolocation物件獲取位置的方法:
- getCurrentPosition - 獲取一次位置資訊。
- watchPosition - 監聽當前位置,位置改變之後就會執行函式
- clearWatch - 清除 watchPosition
具體獲取使用者位置程式碼如下:
navigator.geolocation.getCurrentPosition(success=>{ console.log(success.coords)//包含位置的經緯度、速度、海拔、經緯度精度、海拔精度資訊 },fail=>{ console.log(fail)//獲取失敗的原因 },{ //可增加的4個配置引數 enableHighAccuracy:true,//高精度 timeout:5000,//超時時間,以ms為單位 maximumAge:24*60*60*1000,//位置快取時間,以ms為單位 })
位置獲取成功後返回的 success.coords 的屬性及意義如下:
- coords.latitude - 緯度
- coords.longitude - 經度
- coords.altitude - 海拔
- coords.speed - 速度
- coords.accuracy - 經緯度精度
- coords.altitudeAccuracy - 海拔精度
- coords.heading - 方向,從正北開始的弧度數
具體詳細內容,請點選《HTML5(二)——獲取使用者位置》。
2、搖一搖
微信活動頁面經常有“搖一搖,拿好禮”,還有拼多多搖現金,搖一搖功能也非常常見。HTML5 提供的 devicemotion 事件封裝了裝置的運動感測器,提供裝置的加速度,還提供裝置自轉速率。對裝置運動狀態進行判斷,就可以實現“搖一搖”效果。
devicemotion 監聽手機加速度變化的事件:
- acceleration - 加速度
- accelerationIncludingGravity - 重力加速度
- rotationRate - 旋轉速度
- interval - 獲取的時間間隔
搖一搖程式碼示例:
var shake_threshold = 4000; //放一移動的干擾,設定一個臨界值 /* 使用之前先檢查瀏覽器是否支援 */ if(window.DeviceMotionEvent){ /* 新增事件 */ window.addEventListener('devicemotion',function(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) { alert("搖一搖成功了!"); // Do something } } }) }
3、判斷手機型別
var type=""; if (/android/i.test(navigator.userAgent)){ type="android"; } if (/ipad|iphone|mac/i.test(navigator.userAgent)){ type="ios"; }
4、檢查瀏覽器型別
var browser={ versions : function(){ var u = navigator.userAgent, app = navigator.appVersion; return {//移動終端瀏覽器版本資訊 trident: u.indexOf('Trident') > -1, //IE核心 presto: u.indexOf('Presto') > -1, //opera核心 webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌核心 gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐核心 mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否為移動終端 ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端 android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android終端或者uc瀏覽器 iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否為iPhone或者QQ HD瀏覽器 iPad: u.indexOf('iPad') > -1, //是否iPad webApp: u.indexOf('Safari') == -1 //是否web應該程式,沒有頭部與底部 }; }(), language:(navigator.browserLanguage || navigator.language).toLowerCase() } browser.language // 語言 browser.versions.mobile // 是否為移動終端 browser.versions.ios // ios終端 browser.versions.android // android終端 browser.versions.iPhone // 是否為iPhone browser.versions.iPad // 是否iPad
移動端瀏覽器也有很多,製作廣告外掛的同學,天天面對的是不同瀏覽器遮蔽廣告,所以需要研究每個瀏覽型別。寫外掛的時候經常需要根據不同瀏覽器單獨處理某些元素。
5、拍照
由於呼叫攝像頭有使用許可權,只能在本地執行,線上執行需要使用 https 域名才可以使用。網頁內呼叫攝像頭拍照。目前瀏覽器提供了API能夠直接訪問使用者媒體裝置(攝像頭、麥克風)。
navigator.mediaDevices.getUserMedia
作用:為使用者直接提供直接連線攝像頭、麥克風的硬體裝置介面。
navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){ // 獲取成功 } catch(function(error){ //獲取失敗 }
constraints 為音訊和視訊指定引數 ,如:
{ audio:true , video:true } // 在獲得的媒體中同時包含音訊與視訊 { audio: true, video: { width: 1280, height: 720 } // 獲得指定了大小的視訊 }
6、打電話
網頁資訊中基本都有聯絡電話號碼,聯絡我們等按鈕,在移動端經常需要加入撥打電話功能,這樣使用者只要點選一下就可以撥打電話了。
使用程式碼如下:
<a href="tel:phonenumber">報警!</a>
以下兩種方法親測無效:
- <a href="wtai://wp//mc;10086">撥打10086 </a>
- <a href="dc:5040*0077">撥打熱線</a>
7、發簡訊
想要實現在網頁上點選快捷傳送簡訊功能,此時安卓和ios寫法相同,但是結果卻不同。
<a href="sms:10010?body=TD">傳送簡訊TD到10010</a>
安卓手機:點選之後直接就可以把 TD 作為內容,直接傳送到10010。
ios手機:點選之後電話號碼變成 10010?body=TD 。
測試各種機型,無法相容所有,最後去掉內容,只保留電話號碼。