DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> HTML基礎知識 >> HTML5教程 >> 後HTML5時代項目該如何玩出新意?
後HTML5時代項目該如何玩出新意?
編輯:HTML5教程     

   十二年前,無論多麼復雜的布局,在我們神奇的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,比如

後HTML5時代項目該如何玩出新意?

  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'; // 音頻文件URLvar 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音樂創作。

  二、捕捉用戶攝像頭 - 媒體流 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 1msg.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、當用戶在工作時間將手機放在暗處,偷偷地瞄一眼股市行情的時候,我們可以用語音大聲播報,“親愛的,不用擔心,你的股票中國中車馬上就要跌停了”,多美的畫面。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved