編者按:今天騰訊萬技師同學的這篇技術總結必須強烈安利下,目錄清晰,層次分明,每個接口都有對應的簡介、系統要求、實例、核心代碼以及超實用的思維發散,幫你直觀把這些知識點get起來。以現在HTML 5的勢頭,同志們,你看到的這些,可都是錢吶。
十二年前,無論多么復雜的布局,在我們神奇的table面前,都不是問題;
十年前,阿捷的一本《網站重構》,為我們開啟了新的篇章;
八年前,我們研究yahoo.com,驚嘆它在IE5下都表現得如此完美;
六年前,Web標準化成了我們的基礎技能,我們開始研究網站性能優化;
四年前,我們開始研究自動化工具,自動化測試,誰沒玩過nodejs都不好意思說是頁面仔;
二年前,各種終端風起云涌,響應式、APP開發都成為了我們研究的范圍,CSS3動畫開始風靡;
如今,CSS3動畫、Canvas、SVG、甚至webGL你已經非常熟悉,你是否開始探尋,接下來,我們可以玩什么,來為我們項目帶來一絲新意?
沒錯,本文就是以HTML5 Device API為核心,對HTML5的一些新接口作了一個完整的測試,希望能讓大家有所啟發。
目錄:
一、讓音樂隨心而動 - 音頻處理 Web audio API
二、捕捉用戶攝像頭 - 媒體流 Media Capture
三、你是逗逼? - 語音識別 Web Speech API
四、讓我盡情呵護你 - 設備電量?Battery API
五、獲取用戶位置 - 地理位置?Geolocation API
六、把用戶捧在手心 - 環境光?Ambient Light API
七、陀螺儀?Deviceorientation
八、Websocket
九、NFC
十、震動 -?Vibration API
十一、網絡環境 Connection API
一、讓音樂隨心而動 - 音頻處理 Web audio API
簡介:
Audio對象提供的只是音頻文件的播放,而Web Audio則是給了開發者對音頻數據進行分析、處理的能力,比如混音、過濾。
系統要求:
ios6+、android chrome、android firefox
實例:
http://sy.qq.com/brucewan/device-api/web-audio.html
核心代碼:
var context = new webkitAudioContext();
var source = context.createBufferSource(); ? // 創建一個聲音源
source.buffer = buffer; ? // 告訴該源播放何物?
createBufferSourcesource.connect(context.destination); ? // 將該源與硬件相連
source.start(0); //播放
技術分析:
當我們加載完音頻數據后,我們將創建一個全局的AudioContext對象來對音頻進行處理,AudioContext可以創建各種不同功能類型的音頻節點AudioNode,比如
1、源節點(source node)
我們可以使用兩種方式加載音頻數據:
<1>、audio標簽
var sound, audio = new Audio();
audio.addEventListener('canplay', function() {
sound = context.createMediaElementSource(audio);
sound.connect(context.destination);
});
audio.src = '/audio.mp3';
<2>、XMLHttpRequest
var sound, context = createAudioContext();
var audioURl = '/audio.mp3'; // 音頻文件URL
var xhr = new XMLHttpRequest();
xhr.open('GET', audioURL, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
context.decodeAudioData(request.response, function (buffer) {
source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
}
}
xhr.send();
2、分析節點(analyser node)
我們可以使用AnalyserNode來對音譜進行分析,例如:
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
var bufferLength = analyser.frequencyBinCount;
var dataArray = new Uint8Array(bufferLength);
analyser.getByteTimeDomainData(dataArray);
function draw() {
drawVisual = requestAnimationFrame(draw);
analyser.getByteTimeDomainData(dataArray);
// 將dataArray數據以canvas方式渲染出來
};
draw();
3、處理節點(gain node、panner node、wave shaper node、delay node、convolver node等)
不同的處理節點有不同的作用,比如使用BiquadFilterNode調整音色(大量濾波器)、使用ChannelSplitterNode分割左右聲道、使用GainNode調整增益值實現音樂淡入淡出等等。
需要了解更多的音頻節點可能參考:
https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API
4、目的節點(destination node)
所有被渲染音頻流到達的最終地點
思維發散:
1、可以讓CSS3動畫跟隨背景音樂舞動,可以為我們的網頁增色不少;
2、可以嘗試制作H5酷酷的變聲應用,增加與用戶的互動;
3、甚至可以嘗試H5音樂創作。
看看google的創意:http://v.youku.com/v_show/id_XNTk0MjQyNDMy.html
二、捕捉用戶攝像頭 - 媒體流 Media Capture
簡介:
通過getUserMedia捕捉用戶攝像頭獲取視頻流和通過麥克風獲取用戶聲音。
系統要求:
android chrome、android firefox
實例:
捕獲用戶攝像頭 捕獲用戶麥克風
http://sy.qq.com/brucewan/device-api/camera.html
http://sy.qq.com/brucewan/device-api/microphone-usermedia.html
核心代碼:
1、攝像頭捕捉
navigator.webkitGetUserMedia ({video: true}, function(stream) {
video.src = window.URL.createObjectURL(stream);
localMediaStream = stream;
}, function(e){
})
2、從視頻流中拍照
btnCapture.addEventListener('touchend', function(){
if (localMediaStream) {
canvas.setAttribute('width', video.videoWidth);
canvas.setAttribute('height', video.videoHeight);
ctx.drawImage(video, 0, 0);
}
}, false);
3、用戶聲音錄制
navigator.getUserMedia({audio:true}, function(e) {
context = new audioContext();
audioInput = context.createMediaStreamSource(e);
volume = context.createGain();
recorder = context.createScriptProcessor(2048, 2, 2);
recorder.onaudioprocess = function(e){
recordingLength += 2048;
recorder.connect (context.destination);
}
}, function(error){});
4、保存用戶錄制的聲音
var buffer = new ArrayBuffer(44 + interleaved.length * 2);
var view = new DataView(buffer);
fileReader.readAsDataURL(blob); // android chrome audio不支持blob
… audio.src = event.target.result;
思維發散:
1、從視頻拍照自定義頭像;
2、H5視頻聊天;
3、結合canvas完成好玩的照片合成及處理;
4、結合Web Audio制作有意思變聲應用。
三、你是逗逼? - 語音識別 Web Speech API簡介:
1、將文本轉換成語音;
2、將語音識別為文本。
系統要求:
ios7+,android chrome,android firefox
測試實例:
http://sy.qq.com/brucewan/device-api/microphone-webspeech.html
核心代碼:
1、文本轉換成語音,使用SpeechSynthesisUtterance對象;
var msg = new SpeechSynthesisUtterance();
var voices = window.speechSynthesis.getVoices();
msg.volume = 1; // 0 to 1
msg.text = ‘識別的文本內容’;
msg.lang = 'en-US';
speechSynthesis.speak(msg);
2、語音轉換為文本,使用SpeechRecognition對象。
var newRecognition = new webkitSpeechRecognition();
newRecognition.onresult = function(event){
var interim_transcript = '';
for (var i = event.resultIndex; i < event.results.length; ++i) {
final_transcript += event.results[i][0].transcript;
}
};
測試結論:
1、Android支持不穩定;語音識別測試失敗(暫且認為是某些內置接口被墻所致)。
思維發散:
1、當語音識別成為可能,那聲音控制將可以展示其強大的功能。在某些場景,比如開車、網絡電視,聲音控制將大大改善用戶體驗;
2、H5游戲中最終分數播報,股票信息實時聲音提示,Web Speech都可以大放異彩。
?四、讓我盡情呵護你 - 設備電量 Battery API簡介:
查詢用戶設備電量及是否正在充電。
系統要求:
android firefox
測試實例:
http://sy.qq.com/brucewan/device-api/battery.html
核心代碼:
var battery = navigator.battery || navigator.webkitBattery || navigator.mozBattery || navigator.msBattery;
var str = '';
if (battery) {
str += '<p>你的瀏覽器支持HTML5 Battery API</p>';
if(battery.charging) {
str += '<p>你的設備正在充電</p>';
} else {
str += '<p>你的設備未處于充電狀態</p>';
}
str += '<p>你的設備剩余'+ parseInt(battery.level*100)+'%的電量</p>';
} else {
str += '<p>你的瀏覽器不支持HTML5 Battery API</p>';
}
測試結論:
1、QQ瀏覽器與UC瀏覽器支持該接口,但未正確顯示設備電池信息;
2、caniuse顯示android chrome42支持該接口,實測不支持。
思維發散:
相對而言,我覺得這個接口有些雞肋。
很顯然,并不合適用HTML5做電池管理方面的工作,它所提供的權限也很有限。
我們只能嘗試做一些優化用戶體驗的工作,當用戶設備電量不足時,進入省電模式,比如停用濾鏡、攝像頭開啟、webGL、減少網絡請求等。
?五、獲取用戶位置 - 地理位置 Geolocation簡介:
Geolocation API用于將用戶當前地理位置信息共享給信任的站點,目前主流移動設備都能夠支持。
系統要求:
ios6+、android2.3+
測試實例:
http://sy.qq.com/brucewan/device-api/geolocation.html
核心代碼:
var domInfo = $("#info");
// 獲取位置坐標
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition,showError);
}
else{
domInfo.innerHTML="抱歉,你的瀏覽器不支持地理定位!";
}
// 使用騰訊地圖顯示位置
function showPosition(position) {
var lat=position.coords.latitude;
var lon=position.coords.longitude;
mapholder = $('#mapholder')
mapholder.style.height='250px';
mapholder.style.width = document.documentElement.clientWidth + 'px';
var center = new soso.maps.LatLng(lat, lon);
var map = new soso.maps.Map(mapholder,{
center: center,
zoomLevel: 13
});
var geolocation = new soso.maps.Geolocation();
var marker = null;
geolocation.position({}, function(results, status) {
console.log(results);
var city = $("#info");
if (status == soso.maps.GeolocationStatus.OK) {
map.setCenter(results.latLng);
domInfo.innerHTML = '你當前所在城市: ' + results.name;
if (marker != null) {
marker.setMap(null);
}
// 設置標記
marker = new soso.maps.Marker({
map: map,
position:results.latLng
});
} else {
alert("檢索沒有結果,原因: " + status);
}
});
}
測試結論:
1、Geolocation API的位置信息來源包括GPS、IP地址、RFID、WIFI和藍牙的MAC地址、以及GSM/CDMS的ID等等。規范中沒有規定使用這些設備的先后順序。
2、初測3g環境下比wifi環境理定位更準確;
3、測試三星 GT-S6358(android2.3) geolocation存在,但顯示位置信息不可用POSITION_UNAVAILABLE。
六、把用戶捧在手心 - 環境光 Ambient Light簡介:
Ambient Light API定義了一些事件,這些時間可以提供源于周圍光亮程度的信息,這通常是由設備的光感應器來測量的。設備的光感應器會提取出輝度信息。
系統要求:
android firefox
測試實例:
http://sy.qq.com/brucewan/device-api/ambient-light.html
核心代碼:
這段代碼實現感應用前當前環境光強度,調整網頁背景和文字顏色。
var domInfo = $('#info');
if (!('ondevicelight' in window)) {
domInfo.innerHTML = '你的設備不支持環境光Ambient Light API';
} else {
var lightValue = document.getElementById('dl-value');
window.addEventListener('devicelight', function(event) {
domInfo.innerHTML = '當前環境光線強度為:' + Math.round(event.value) + 'lux';
var backgroundColor = 'rgba(0,0,0,'+(1-event.value/100) +')';
document.body.style.backgroundColor = backgroundColor;
if(event.value < 50) {
document.body.style.color = '#fff'
} else {
document.body.style.color = '#000'
}
});
}
思維發散:
該接口適合的范圍很窄,卻能做出很貼心的用戶體驗。
1、當我們根據Ambient Light強度、陀螺儀信息、當地時間判斷出用戶正躺在床上準備入睡前在體驗我們的產品,我們自然可以調整我們背景與文字顏色讓用戶感覺到舒適,我們還可以來一段安靜的音樂,甚至使用Web Speech API播報當前時間,并說一聲“晚安”,何其溫馨;
2、該接口也可以應用于H5游戲場景,比如日落時分,我們可以在游戲中使用安靜祥和的游戲場景;
3、當用戶在工作時間將手機放在暗處,偷偷地瞄一眼股市行情的時候,我們可以用語音大聲播報,“親愛的,不用擔心,你的股票中國中車馬上就要跌停了”,多美的畫面。
參考文獻:
https://developer.mozilla.org/en-US/docs/Web/API
http://webaudiodemos.appspot.com/
http://www.w3.org/2009/dap/
【走在時代前列的騰訊HTML 5精品好文】
DNF實戰總結好文!
《騰訊游戲實戰!DNF浴火新生H5項目總結》優化HMTL 5頁面的6個技巧!
《騰訊精品文!六大奇招帶你優化HTML5移動頁面》H5頁面設計實戰總結!
《春雨先知!騰訊移動端H5頁面設計實戰分享》
原文地址:tgideas.qq
作者:萬技師
【優設網 原創文章 投稿郵箱:2650232288@qq.com】
================關于優設網================
"優設網uisdc.com"是國內人氣最高的網頁設計師學習平臺,專注分享網頁設計、無線端設計以及PS教程。
【特色推薦】
設計師需要讀的100本書:史上最全的設計師圖書導航:http://hao.uisdc.com/book/。
設計微博:擁有粉絲量97萬的人氣微博@優秀網頁設計 ,歡迎關注獲取網頁設計資源、下載頂尖設計素材。
設計導航:全球頂尖設計網站推薦,設計師必備導航:http://hao.uisdc.com
———————————————————–
想在手機上、被窩里獲取設計教程、經驗分享和各種意想不到的"福利"嗎?
添加 優秀網頁設計 微信號:【youshege】優設哥的全拼
您也可以通過掃描下方二維碼快速添加:
復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。
發評論!每天贏獎品
點擊 登錄 后,在評論區留言,系統會隨機派送獎品
2012年成立至今,是國內備受歡迎的設計師平臺,提供獎品贊助 聯系我們
AI輔助海報設計101例
已累計誕生 737 位幸運星
發表評論 為下方 1 條評論點贊,解鎖好運彩蛋
↓ 下方為您推薦了一些精彩有趣的文章熱評 ↓