@almirfilho 
@caio_gondim 
@loopinfinito
HTML5 Sensitivo 
Seu browser + LSD
Acesso a 
dispositivos
APIs do Além
APIs do Além 
Acelerômetro
APIs do Além 
Acelerômetro 
Geolocalização
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
@caio_gondim 
@almirfilho
@loopinfinito
loopinfinito.com.br
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
Acelerômetro
Orientação 
& 
Aceleração
Sistema de 
Coordenadas
y 
Sistema de 
Coordenadas
y 
x 
Sistema de 
Coordenadas
z y 
x 
Sistema de 
Coordenadas
Rotação z y 
x
Rotação 
z y 
alpha 
x
Rotação z y 
x 
beta
Rotação z y 
gamma 
x
API
API 
DeviceOrientationEvent 
DeviceMotionEvent
Orientação 
DeviceOrientationEvent
Obtém a 
Rotação dos eixos
Obtém a 
Rotação dos eixos 
x y z
Obtém a 
Rotação dos eixos 
x y z 
beta gamma alpha
beta gamma alpha 
em graus
z 
alpha = 0º
z 
alpha = 25º
x 
beta = 0º
x 
beta = 30º
y 
gamma = 0º
y 
gamma = 45º
JavaScript 
por favor!
if( window.DeviceOrientationEvent != undefined ){ 
// suporte garantido =) 
} 
Teste o suporte
window.addEventListener( ‘deviceorientation’, 
function( eventData ){ 
// faça acontecer 
} 
) 
Trate o evento
Dados de 
deviceorientation 
eventData = { 
alpha: 0.01042012, // graus 
beta: 11.34221344, // graus 
gamma: 27.102012102, // graus 
absolute: true, 
... // propriedades de Event 
}
Aceleração 
DeviceMotionEvent
Obtém dados 
sobre movimentos 
físicos em cada eixo
Obtém dados 
sobre movimentos 
físicos em cada eixo 
x y z
x y z 
em m/s²
if( window.DeviceMotionEvent != undefined ){ 
// suporte garantido =) 
} 
Teste o suporte
window.addEventListener( ‘devicemotion’, 
function( eventData ){ 
// faça acontecer 
} 
) 
Trate o evento
Dados de devicemotion 
eventData = { 
interval: 200, // milisegundos 
acceleration: { 
x: 0.1534532, // metro/s² 
y: 3.9876581, // metro/s² 
z: 1.0092722 // metro/s² 
}, 
accelerationIncludingGravity: { x, y, z }, // idem 
rotationRate: { alpha, beta, gamma } // orientation 
... // propriedades de Event 
}
DEMO
Suporte Desktop
Suporte Desktop 
7 6 
(parcial) (parcial)
Suporte Mobile
Suporte Mobile 
4.2 18 
15 
12 3.0 10
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
Geolocalização
Posição em relação a 
superfície do planeta
Quem usa? 
serviços de mapas 
redes sociais 
aplicações e-gov
Localização = Contexto
Localização = Contexto 
Maior relevância
Busca 
& 
Recomendação 
mais eficazes
Obtendo a 
Geolocalização 
Desktop x Móvel
Desktop 
Posição 
Localização 
fixa 
aproximada
Móvel 
Posição 
Localização 
variável 
mais exata
API
API 
navigator.geolocation
if( navigator.geolocation != undefined ){ 
// suporte garantido =) 
} 
Teste o suporte
// requisitando geolocalização 
navigator.geolocation.getCurrentPosition( showMap ) 
// setando o callback 
function showMap( position ){ 
// só alegria 
} 
Defina o callback
Dados de .getCurrentPosition 
position = { 
timestamp: 307770135, // DOMTimeStamp 
coords: { 
accuracy: 12, // metros 
latitude: -35.29873363499, // graus 
longitude: 123.44334887755,// graus 
altitude: 400.3, // metros (opcional) 
heading: 45.5, // graus (opcional) 
speed: 5.4 // m/s (opcional) 
} 
}
DEMO
Suporte Desktop
Suporte Desktop 
5 3.5 
9 
5 
10.6
Suporte Mobile
Suporte Mobile 
3.2 18 
15 
11 2.1 7
API’s do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
Câmera
WebRTC
WebRTC 
Real-Time 
Communications
API
API 
Stream 
Media Capture
API 
Stream
Stream 
input 
MediaStream <video> 
MediaStream 
Track 
video 
MediaStream 
Track 
audio 
PeerConection
API 
Media Capture
// sem prefixos dos vendors 
if ( navigator.getUserMedia ){ 
// câmera, ação! 
} 
Teste o suporte
Permissão 
navigator.getUserMedia( 
{ video: true }, 
sucessoCallback, 
falhaCallback 
)
Linkando no 
<video> 
function sucessoCallback(stream) { 
var video = document.getElementsByTagName(‘video’)[0] 
video.autoplay = true 
video.src = window.webkitURL.createObjectURL(stream) 
}
Mix com 
<canvas>
Mix com 
WebGL
DEMO
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
Suporte Desktop
Suporte Desktop 
6 21
Suporte Mobile
Suporte Mobile 
6
Microfone
API
API 
Web Speech 
Media Capture
Reconhecimento 
& Síntese 
de voz 
Web Speech
Reconhecimento 
de voz
Síntese de voz
Teste o suporte 
if ( document.createElement( ‘input’ ).webkitSpeech != undefined ) 
{ 
// suporte garantido =) 
}
Marcação HTML 
<input type=”text” x-webkit-speech />
{ }
document 
.getElementsByTagName( ‘input’ )[0] 
.addEventListener( ‘webkitspeechchange’, 
function( eventData ){ 
// sua mágica 
} 
) 
Evento
Dados de 
webkitspeechange 
eventData = { 
results: [ 
{ 
confidence: 0.61285305, 
utterance: ‘praia’ 
}, 
... 
], 
... // propriedades de Event 
}
DEMO
Suporte Desktop
Suporte Desktop 
22*
Captura de 
Áudio 
Media Capture
Baixo 
Nível
Baixa 
Latência
Guitarra 
Mic externo 
...
// sem prefixos dos vendors 
if ( navigator.getUserMedia ){ 
// we got it! 
} 
Teste o suporte
Permissão 
navigator.getUserMedia( 
{ audio: true }, 
sucessoCallback, 
falhaCallback 
)
Mix com 
Web Audio
Callback 
function sucessoCallback( stream ) { 
var context = new webkitAudioContext() 
var mediaStreamSource = context 
.createMediaStreamSource( stream ) 
mediaStreamSource.connect( filter1 ) 
... 
filter1.connect( context.destination ) 
}
DEMO
Suporte Desktop
Suporte Desktop 
6 21
Suporte Mobile
Suporte Mobile 
6
APIs do Além 
Acelerômetro 
Geolocalização 
Câmera 
Microfone
?
@loopinfinito 
@almirfilho 
@caio_gondim
Obrigado!

HTML5 Sensitivo