Deviceaccess
- 6. Geolocation API
¿ÉÒÔ»ñµÃÓû§ËùÔÚµØÀíλÖõľγ¶ÈÐÅÏ¢
µ÷Óà Geolocation API ´ÓÈ«¾Ö navigator¶ÔÏóµÄ geolocationÊôÐÔ¿ª
ʼ£ºnavigator.geolocation
°²²©ÖгÌÔÚÏß
1
2
3
4
5
6
<script?type='text/javascript'>
??//?×î¼òµ¥µÄʹÓ÷½Ê½£ºÃ»ÓÐ×öÈκεļì²â£¬´íÎó´¦Àí£¬Ò²Ã»ÓÐÑ¡Ïî²ÎÊý
??function?find_my_location()?{
????navigator.geolocation.getCurrentPosition(show_map)?
??}
</script>
6/42
- 7. Geolocation API
¼ì²âä¯ÀÀÆ÷ÊÇ·ñÖ§³ÖµØÀíλÖÃAPI
·½·¨1£º ¼ì²â¼ì²â È«¾Ö¶ÔÏó navigator ÊÇ·ñ¾ßÓÐ geolocation ÊôÐÔ
·½·¨2: ʹÓÃModernizrÌṩµÄ·½·¨ ¼ì²â¼ì²â
°²²©ÖгÌÔÚÏß
1
2
3
4
5
<script?type='text/javascript'>
??function?supports_geolocation()?{
????return?!!navigator.geolocation?
??}
</script>
1
2
3
4
5
6
7
8
9
<script?type='text/javascript'>
??function?find_my_location()?{
????if?(Modernizr.geolocation)?{
????????navigator.geolocation.getCurrentPosition(show_map)?
????}?else?{
????????//?ä¯ÀÀÆ÷ûÓÐÌṩÔÉúÖ§³Ö£¬Ê¹ÓûØÍË·½°¸
????}
??}
</script>
7/42
- 8. Geolocation API
getCurrentPosition()
ʹÓÃgetCurrentPosition()·½·¨ »ñÈ¡µ±Ç°Î»ÖÃÐÅÏ¢»ñÈ¡µ±Ç°Î»ÖÃÐÅÏ¢ .
°²²©ÖгÌÔÚÏß
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script?type='text/javascript'>
????function?find_my_location()?{
????????if?(Modernizr.geolocation)?{
????????????navigator.geolocation.getCurrentPosition(show_map)?
????????}?else?{
????????????//?ÆäËû·½°¸
????????}
????}
?????
????function?show_map(position)?{
????????var?latitude?=?position.coords.latitude?
????????var?longitude?=?position.coords.longitude?
????????alert('Lat:?'?+?latitude?+?'?Lon:?'?+?longitude)?
????}
</script>
8/42
- 9. Position Êý¾Ý
³É¹¦µÄ»Øµ÷º¯ÊýµÄ²ÎÊýÊÇÒ»¸ö Position¶ÔÏ󣬰üÀ¨ coordsºÍ timestampÁ½¸öÊôÐÔ¡£
ÊôÐÔ ÀàÐÍ ±¸×¢
coords.latitude double γ¶È(¶È)
coords.longitude double ¾¶È(¶È)
coords.accuracy double ¾«¶È(Ã×)
coords.altitude double»ònull º£°Î(Ã×)
coords.altitudeAccuracy double»ònull º£°Î¾«¶È(Ã×)
coords.heading double»ònull ¶È(˳ʱÕ룬ÒÔÕý±±Îª»ù×¼)
coords.speed double»ònull Ã×/Ãë
timestamp DOMTimeStamp ¿ÉÒÔת³ÉDate¶ÔÏó
°²²©ÖгÌÔÚÏß 9/42
- 11. PositionError ¶ÔÏó
ÊôÐÔ ÀàÐÍ ±¸×¢
code short ¿Éö¾Ù
message DOMString ÓëÖÕ¶ËÓû§ÎÞ¹Ø
ÆäÖÐcodeÊôÐÔ¾ßÓÐÒÔÏÂÊôÐÔÖµ£º
°²²©ÖгÌÔÚÏß
PERMISSION_DENIED(1): Óû§²»Í¬Òâ±»»ñȡλÖÃÐÅÏ¢¡£
POSITION_UNAVAILABLE(2): ÍøÂç²»¿ÉÓûòÕßÎÞ·¨Á¬½Óµ½»ñȡλÖÃÐÅÏ¢µÄÎÀÐÇ¡£
TIMEOUT(3): ÍøÂç¿ÉÓõ«ÊÇ»¨ÁËÌ«³¤Ê±¼äµÄ¼ÆËãÓû§µÄλÖÃÉÏ¡£
UNKNOWN_ERROR(0): ·¢ÉúÆäËûδ֪´íÎó¡£
¡¤
¡¤
¡¤
¡¤
11/42
- 15. orientationchange ʼþ
Æ»¹û¹«Ë¾ÎªÒƶ¯ Safari Ìí¼ÓÁË orientationchangeʼþ£¬ÒԱ㿪·¢ÈËÔ±ÄÜÈ·¶¨Óû§
ºÎʱ½«É豸ÓɺáÏò²é¿´Ä£Ê½Çл»Îª×ÝÏò²é¿´Ä£Ê½¡£Òƶ¯ Safari µÄ
window.orientationÊôÐÔÖпÉÄÜ°üº¬3¸öÖµ£º
°²²©ÖгÌÔÚÏß
0±íʾФÏñģʽ£¨Portrait£©
90±íʾÏò×óÐýתµÄºáÏòģʽ£¨¡°Ö÷ÆÁÄ»¡±°´Å¥ÔÚÓҲࣩ
-90±íʾÏòÓÒÐýתµÄºáÏòģʽ£¨¡°Ö÷ÆÁÄ»¡±°´Å¥ÔÚ×ó²à£©
¡¤
¡¤
¡¤
15/42
- 16. ´¦Àí orientationchange ʼþ
ÕâʱµÄ event¶ÔÏó²»°üº¬ÈκÎÓмÛÖµÐÅÏ¢£¬Î¨Ò»Ïà¹ØµÄÐÅÏ¢¿ÉÒÔͨ¹ý
window.orientation·ÃÎʵ½¡£
°²²©ÖгÌÔÚÏß
1
2
3
4
5
6
7
8
9
10
11
12
13
function?updateOrientation()?{
????switch(window.orientation)?{
????case?0:
????//?...
????case??90:????????????????????????
????//?....
????case?90:
????//?...
????case?180:
????//?...
????}
}?????
window.addEventListener('orientationchange',?updateOrientation,?false)?
16/42
- 22. alpha
ΧÈÆ z ÖáÐýת»áÒýÆð alpha Ðýת½Ç¶È·¢Éú±ä»¯¡£
µ±É豸¶¥²¿Ö¸ÏòµØÇòÕý±±·½Ïòʱ£¬alpha ½ÇÊÇ 0 ¶È£¬É豸Ïò×ó±ßÐýתʱÔö´ó£¬½éÓÚ 0 -
360 ¶ÈÖ®¼ä¡£
°²²©ÖгÌÔÚÏß 22/42
- 26. MozOrientation ʼþ
¼æÈÝÒƶ¯°æ Firefox
Firefox Òƶ¯ä¯ÀÀÆ÷ÉÏʵÏֵļì²âÉ豸·½ÏòµÄʼþ¡£¾²Ö¹×´Ì¬Ï£¬x ֵΪ 0£¬y ֵΪ
0£¬z ֵΪ 1¡£Õ⼸¸öÖµ¶¼½éÓÚ1ºÍ-1Ö®¼ä¡£
°²²©ÖгÌÔÚÏß
ÏòÓÒÇãб£¬x »á¼õÉÙµ½ -1£»Ïò×óÇãб£¬x »áÔö´óµ½ 1
ÏòÔ¶ÀëÓû§·½ÏòÇãб£¬y Öµ»á¼õÉÙµ½ -1£»Ïò½Ó½üÓû§·½ÏòÇãб£¬y Öµ»áÔö´óµ½ 1£»
¡¤
¡¤
1
2
3
4
5
??????//?Õë¶Ô?Android?°æµÄ?Firefox
if?(!evt.gamma?&&?!evt.beta)?{
??evt.gamma?=??(evt.x?*?(180?/?Math.PI))?
??evt.beta?=?(evt.y?*?(180?/?Math.PI))?
}
26/42
- 27. deviceorientation ²¹³ä˵Ã÷
½ØÖ¹2013Äê1Ô£¬Mozilla Éù³Æ×Ô FF6+ Ö®ºó¶¼Ö§³Ö deviceorientationʼþ£¬Êµ¼Ê
²¢²»Ö§³Ö£»·´¶øÊÇºÅ³Æ´Ó 3.6 ¿ªÊ¼Ö§³Ö£¬µ«ÊǺóÃæÓÖÒÆ×ßµÄ MozOrientationʼþÔÚ
Android °æµÄ Firefox ÉÏÖ§³Ö MozOrientationʼþ¡£
Chrome ºÍ Android °æµÄ WebKit£¬iOS4.2+ µÄ Safari ¾ùÖ§³Ö deviceorientation
ʼþ¡£
°²²©ÖгÌÔÚÏß
²Î¼û£ºhttp://caniuse.com/#feat=deviceorientation
27/42
- 34. Touch ¶ÔÏóµÄÊôÐÔ
°²²©ÖгÌÔÚÏß
clientX: Ïà¶ÔÓÚ viewport µÄ x ×ø±ê£¬ÀàÐÍ long£¬µ¥Î»ÏñËØ
clientY: Ïà¶ÔÓÚ viewport µÄ y Öá×ø±ê
identifier£º´¥¿ØµãµÄΨһ±êʶ£¨±È·½ËµÒ»¸ùÊÖÖ¸¾ÍÊÇÒ»¸öÒ»¸ö´¥¿Øµã£©
pageX: Ò³ÃæÖÐµÄ x ×ø±ê
pageY£ºÒ³ÃæÖÐµÄ y ×ø±ê
screenX£ºÆÁÄ»ÖÐµÄ x ×ø±ê
screenY£ºÆÁÄ»ÖÐµÄ y ×ø±ê
target£º´¥ÃþµÄ DOM ½ÚµãÄ¿±ê
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
34/42
- 35. Multi-touch Demo
Touch Events + Canvas
°²²©ÖгÌÔÚÏß
ÉèÖô¥¿Øʼþ´¦Àí³ÌÐò
¸ú×ÙеĴ¥¿Ø(touchstart)·¢Éú
Ëæ×Å»¬¶¯(touchmove)½øÐÐ Canvas »æÖÆ
´¦Àí´¥¿Ø½áÊø(touchend)ʼþ
´¦Àí´¥¿ØÈ¡Ïû(touchcancel)ʼþ
¡¤
¡¤
¡¤
¡¤
¡¤
35/42
- 36. The panning gesture
Ö±µ½Óû§Í£Ö¹ panning µÄʱºò£¬One-finger panning ²Å»á²úÉúÒ»¸ö onscrollʼþ
°²²©ÖгÌÔÚÏß
A touch-scrollable div: http://eightmedia.github.com/hammer.js/scroll/
36/42
- 37. The touch and hold gesture
³¤°´²»»á²úÉúʼþ£»µ«ÊÇÈç¹û´¥¿ØµÄÊÇͼƬ£¬¿Éµã»÷Á´½Ó»òÊǿɱà¼ÄÚÈݵÈÍùÍù»áÉú
³ÉÒ»¸ö information bubble¡£(¸´ÖÆ£¬Õ³Ìù£¬È«Ñ¡£¬Í¼Æ¬Áí´æΪ ...)
°²²©ÖгÌÔÚÏß
Basic demo: http://eightmedia.github.com/hammer.js/demo/
37/42
- 39. The pinch open gesture
pinch open gesture ²»²úÉúÈκÎÊó±êʼþ
°²²©ÖгÌÔÚÏß
http://eightmedia.github.com/hammer.js/zoom/, http://eightmedia.github.com/hammer.js/zoom/index2.html
39/42
- 40. Two finger panning gesture
°²²©ÖгÌÔÚÏß
Á½¸ùÊÖÖ¸°´×¡ÆÁÄ»²¢Òƶ¯£¬Èç¹ûÂäÔڿɹö¶¯µÄÔªËØÉÏ£¬²úÉú mousewheelʼþ
Èç¹ûÔªËز»Êǿɹö¶¯µÄ£¬Òƶ¯ÍøÒ³¡£ÔÚ panning ¹ý³ÌÖв»²úÉúʼþ
µ±Óû§Í£Ö¹ panning ʱ£¬²úÉúÒ»¸ö onscrollʼþ
¡¤
¡¤
¡¤
http://eightmedia.github.com/hammer.js/zoom/, http://eightmedia.github.com/hammer.js/zoom/index2.html
40/42
- 41. À©Õ¹ÔĶÁ
°²²©ÖгÌÔÚÏß
W3CµØÀíλÖà API
geo.js, µØÀíλÖõÄJS Framework¡£ÒÀÕÕW3CµØÀíλÖà API¹æ·¶·â×°Á˵ײãϵͳÌض¨µÄʵÏÖ¡£
This End Up: Using Device Orientation
Can I Use?
Specification: Touch Events
Drag and drop for iPhone and Android
Safari Web Content Guide: Handling Events
Hammer.js: A javascript library for multi-touch gestures
MDN: Touch Events
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
¡¤
41/42