第3回webkit/html5勉強会 - file apiと加速度センサー

36
File APIと加速度センサー nakamura001 2010/02/17 第3回 Webkit/HTML5勉強会

Upload: nakamura001

Post on 13-Jun-2015

7.135 views

Category:

Education


0 download

DESCRIPTION

第3回Webkit/HTML5勉強会で発表した「File APIと加速度センサー」のプレゼン資料。 ※プレゼン資料だけで理解出来るように一部修正有り。

TRANSCRIPT

Page 1: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

File APIと加速度センサー

nakamura001

2010/02/17

第3回 Webkit/HTML5勉強会

Page 2: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

File API

Page 3: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

Firefox 3.6で使えます

Page 5: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

イベントリスナーの登録

dropbox = document.getElementById("dropbox"); dropbox.addEventListener("dragover", dragover, true); dropbox.addEventListener("drop", drop, true);

Page 6: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

Drag Over時の処理

dropbox.addEventListener("dragover", dragover, true);

function dragover(e) { // イベントのさらなる伝播を止める e.stopPropagation(); // ブラウザのアクションを動作させない e.preventDefault();}

Page 7: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

Drop時の処理function drop(e) { var dt = e.dataTransfer; var files = dt.files;

if (files.length > 0) { var binaryReader = new FileReader(); binaryReader.onloadend = function() { var file = files[0]; (ここでファイルに対する処理を実行) } binaryReader.readAsBinaryString(files[0]); } }

Page 8: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ファイルに対する処理

var binaryReader = new FileReader();binaryReader.onloadend = function() { info_msg = info_msg + "size : " + file.size + "\n"; info_msg = info_msg + "type : " + file.type + "\n"

pos = 0; var c = binaryReader.result.charCodeAt(pos);}

Page 9: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ファイルに対する処理

var binaryReader = new FileReader();binaryReader.onloadend = function() { info_msg = info_msg + "size : " + file.size + "\n"; info_msg = info_msg + "type : " + file.type + "\n"

pos = 0; var c = binaryReader.result.charCodeAt(pos);}

ファイルのどの位置からデータを取得するかを指定

Page 10: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

少々、面倒な事が…

Page 11: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

1Byteずつしか読めない

Page 12: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

intやlongなどのデータはどうする?

Page 13: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

サンプルはどうしてる?

Page 15: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

良い感じのライブラリになってる事を発見

Page 16: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

exif.js

Page 17: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

パクっ活用させて貰おう

Page 18: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ライセンスはMPL

Page 19: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

素晴らしい!!

Page 20: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

取得できるデータ

関数名 データ

getByteAt Byte(符号無し)

getShortAt Signed Short(符号有りの16bit)

getSLongAt Signed Long(符号有りの32bit)

getLongAt Unsigned Long(符号無し32bit)

getStringAt 文字列データ

Page 21: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

テキストファイルのとき

text = file.getAsText("utf-8");

【参考サイト】Firefox3.6βで利用できるFile APIの可能性について:マピオンラボ(Javascript)http://labs.mapion.co.jp/blog/javascript/firefox36file_api.php

Page 22: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

テキストファイルのとき

text = file.getAsText("utf-8");

文字のエンコードを指定

【参考サイト】Firefox3.6βで利用できるFile APIの可能性について:マピオンラボ(Javascript)http://labs.mapion.co.jp/blog/javascript/firefox36file_api.php

Page 23: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

加速度センサー

Page 24: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

すみません、これも現在は

Firefox 3.6だけが対応

Page 25: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

しかも対応するパソコンは最近のMacのノートと一部のThink Pad

Page 27: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

使い方は至って簡単

Page 28: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

使い方

function handleOrientation(orientData) { var x = orientData.x; var y = orientData.y; var z = orientData.z; }window.addEventListener("MozOrientation", handleOrientation, true);

・addEventListenerで追加するだけ・X,Y,Zの3つの軸の加速度が取得可能

Page 29: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

1つだけ注意!!

Page 30: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ノイズが出る事が有るみたい

Page 32: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

対策

Page 33: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ローパスフィルタ

Page 34: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ローパスフィルタ

function handleOrientation(orientData) { var accel_scale = 500.0; var filter_val = 0.1;

pos_x = (orientData.x*accel_scale * filter_val) + (pos_x * (1.0 - filter_val)); pos_y = (orientData.y*accel_scale * filter_val) + (pos_y * (1.0 - filter_val));

この処理により、加速度の値は徐々に反映されるようになり急激な変化の値が直接反映されなくなる。

Page 35: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

ローパスフィルタ

function handleOrientation(orientData) { var accel_scale = 500.0; var filter_val = 0.1;

pos_x = (orientData.x*accel_scale * filter_val) + (pos_x * (1.0 - filter_val)); pos_y = (orientData.y*accel_scale * filter_val) + (pos_y * (1.0 - filter_val));

この処理により、加速度の値は徐々に反映されるようになり急激な変化の値が直接反映されなくなる。

とりあえず、この式を挟んでおけばOK

Page 36: 第3回Webkit/HTML5勉強会 - File APIと加速度センサー

その他、関連資料はこちら

http://www32.atwiki.jp/nakamura001/pages/82.html