后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,比如


  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、当用户在工作时间将手机放在暗处,偷偷地瞄一眼股市行情的时候,我们可以用语音大声播报,“亲爱的,不用担心,你的股票中国中车马上就要跌停了”,多美的画面。

时间: 2024-11-13 19:41:20

后HTML5时代项目该如何玩出新意?的相关文章

后移动时代的 Web 设计

还记得 Wap 吗,现在还有多少人使用 Wap?后移动时代,随着浏览器技术的进步,为移动设备设置特殊站点已经不再必要.作为 Web 设计师,如果你能遵循一些基本的设计与布局原则,你的站点将能被多数移动设备更轻松地访问.本文讲述的是后移动时代的 Web 设计原则. 移动浏览技术现状 当今最受欢迎的手机系统包括 Android,BlackBerry 与 iPhone.虽然这些手机系统中的浏览器都支持 HTML + CSS + JavaScript,但它们仍然存在某些局限. Flash 现阶段,用手机

后地产时代用友网络助房地产企业走上互联网+

二十多年来中国经济建设的迅猛发展,为中国房地产行业带来了前所未有的机遇,经济发展与市场需求的高速增长,带动了从沿海地区到内地城市众多房地产开发企业的迅速成长和发展. 根据中房协的数据显示,我国商品房待售面积达到6.5亿平方米,初步估计在15个月左右的时间销售完.如今是买房的人少,房源又多,供给需求严重不对等,我国的房地产行业进入到后地产时代. 在后地产时代,买房需求减少,房产成本高利润薄,很多地产公司会想办法控制成本,并且从中挤出利润.那么,在后地产时代,房地产商如何通过互联网化手段,来管理好自

后摩尔时代,如何给你的CPU减负?

本文讲的是后摩尔时代,如何给你的CPU减负,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和Web服务的规模却在指数级增长.如何用硬件加速来提升性能.降低成本?下面我们一起来看看. 一.背景介绍 通用处理器(CPU)的摩尔定律已入暮年,而机器学习和Web服务的规模却在指数级增长.伴随着当今硬件技术的成熟发展,普通CPU无论是在计算能力,还是资源成本上相对于一些专用硬件已经没有绝对优势,这也促使硬件加速技术得到各大公司的青睐,譬如三大互联网巨头百度.阿里.腾讯内部的接入层采用类似KeyLess

后众筹时代,这些新硬件军团现在在做什么呢?

摘要: 众筹之后是针对那些成功众筹的明星产品做的一个系列报道,讲述这些团队众筹之后的故事.后众筹时代,这些新硬件军团现在在做什么呢?他们是否成功的将自己的极客产品转化成了 "众筹之后"是针对那些成功众筹的"明星产品"做的一个系列报道,讲述这些团队众筹之后的故事.后众筹时代,这些新硬件军团现在在做什么呢?他们是否成功的将自己的极客产品转化成了大众消费品?他们又是否成功的由一个爱好 DIY 的团队发展成了良性运转的公司?我们将通过一些列文章,为大家还原一个完整的硬件创业

后Hadoop时代,我们该如何去架构自己的大数据平台

过去数年,大数据开源生态圈完成了从无到有的转变,时下更是各种技术框架林立--从收集到处理,一直到数据可视化和储存,每个点都或多或少存在多个不同的替代方案.那么,在这个Hadoop已经不是唯一的时代,企业又该如何选择开源大数据技术,来架构一个稳定可靠的大数据平台? 2016年10月27日,特邀请了kyligence创始人兼CEO韩卿 & 阿里云技术专家曹龙与大家一起共同探讨这个问题,点击这里直接报名. Hadoop老矣? 对于大数据玩家来说,Hadoop绝不陌生,正式立项于2006年,Doug C

后云计算时代里的新技术

云计算是2006年8月,谷歌首席执行官埃里克施密特在搜索引擎大会上首次在正式公开场合提出的.如今,云计算已经走过了11年,成为家喻户晓的新技术代名词.云计算技术获得了空前的发展,在数据中心领域不断生根发芽,硕果累累.几乎在所有的信息系统中都能找到云计算的身影,云计算带来了新一次的信息技术变革.就在云计算技术如日中天的时候,也有些人提出了新的想法,这源于对云计算存在的应用局限性进行了优化,任何一种技术都有其应用的局限性,不可能适用所有场合.对于云计算也同样如此,尤其是云计算技术本身出现时间并不长,

后诺基亚时代 芬兰还有哪些商业秘诀

在这个处于北纬60°的北欧小城赫尔辛基,略有些凄清的街头,叮当作响的有轨电车掠过古老而纵横的青石路面,它们偶尔会缓缓地驶向远处的"诺基亚大楼". 作为北欧巨人的神话,诺基亚带领芬兰进入了一个全新的电子工业和通信技术的时代--在其鼎盛时期,诺基亚为芬兰贡献了4%的GDP和1/4的公司税. 诺基亚奇迹连同全球化震动了整个芬兰传统民族经济工业领域的结构,即使在诺基亚没落的今天,也依旧深深地影响着这个民族的性格与文化. 初创企业文化 诺基亚的"倒下"确实带给芬兰人一些惊恐与

六西格玛:后ERP时代的商战利器

20世纪70年代,美国通信市场受到高质量日本产品的冲击.当时,摩托罗拉虽然在美国寻呼机市场占据大部分市场,但其领导地位却日益受到日本企业的威胁.1979年,其首席执行官鲍勃·高尔文在"我们的质量糟糕透了"的疾呼下,开始大力推行六西格玛(它代表着质量水平,指100万次机会下不超过3.4个缺陷).经过几年的实践努力,从面向制造能力的设计(DFM)培训项目到六西格玛设计方法(DFSS)在工程技术部门和其他部门实施,六西格玛在摩托罗拉全公司范围内得到广泛施行.推广.六西格玛产生的强大动力是摩托

科技企业后危机时代布局三大战略

后危机时代企业如何获得竞争优势?作为全国人大代表的几位科技企业掌舵人认为,把握新兴产业的机遇.重视自主创新以及"走出去"将成为科技企业在后危机时代的主要战略. 本报记者 霍鑫报道 3月11日,十一届全国人大三次会议新闻中心举行主题为"人大代表在应对国际金融危机冲击中的作用"的集体采访,5位企业家代表接受了集体采访,其中包括了3家科技企业的掌舵人--湖北省武汉凯迪控股投资有限公司董事长陈义龙:联想控股有限公司董事长兼总裁.联想集团有限公司董事局主席柳传志:福建新大陆科