iPhoneç¨Webã¢ããªä½ãã¨ãã®ã¡ã¢
paiTouch作ってみてåãã£ããã¨ã¨ãã
ã¾ãã°ã°ãã°æ®éã«åºã¦ããã¨æããã ãã©ä¸å¿ã¾ã¨ãããããããããiPhoneç¨Webã¢ããª(ã²ã¼ã ã¨ã)ãä½ããããã£ã¦åãå£ã¯ããããããããããªãã
ä½ã¯ãªãã¨ãviewport
JSã¨ãã§ã²ã¼ã ä½ã£ã¦ã¦ãåæãªåçã§ç»é¢ã表示ããã¦ãããããã¨ã¯ãªãã®ã§ãHTMLã®ãããé¨ã«ä»¥ä¸ã®ããã«æ¸ãã¦ããã°ããã¨æãã
<meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
ããã§å®å¯¸ã§è¡¨ç¤ºããã¦æ¡ç¸®ãæ¢ããããã
apple-touch-icon.png
Webãµã¤ããããã¼ã ç»é¢ã«è¿½å ãããã¨ãã«ä½¿ãããç»åãã¾ããªãã¦ãèªåçã«ãµã¤ãã®ã¹ã¯ãªã¼ã³ã·ã§ããã使ããããã ãã©ããã£ããã ããç¨æãããã
ãããªæãã®57x57pxã®ç»åãç¨æãã¦ãapple-touch-icon.pngã¨ããååã§ãããã«ç½®ãã¦ããã¨iPhoneãåæã«ããã£ã½ã質æã«ãã¦ããã¦ã
ãããªãã
ã¢ãã¬ã¹ãã¼ãæ¶ã
ã¢ãã¬ã¹ãã¼ã¯window.scrollTo(0, 1)ã¨ãã¦ããã°æ¶ããã®ã§ãwindow.onLoadã§ãããå¼ã¹ã°åºæ¬çã«ã¯OKããã ãã¤ãã³ãçºçç´å¾ã«å¼ã¶ã¨å¤±æãããã¨ãããã®ã§setTimeoutã§å°ãå¾ ã£ã¦ããã®ãã³ããããã
Event.observe(window, 'load', function(e) { setTimeout(scrollTo, 500, 0, 1); });
onTouchXxx
ã¿ããã¤ãã³ãã¯JavaScriptããã¯onTouch(Start|Move|End|Cancel)ãªããã§æ¾ãã¦ãã¿ãããã¦ãã座æ¨ã¯event.touches[index].xã¨ãã§åãããã ãã©ãã¾ãããã¯é©å½ã«ã°ã°ã£ã¦ããã ãã¨ãã¦ãããåç´ã«onTouchXxxã®ãªã¹ãã¼ç»é²ããã ãã ã¨ã¦ã£ã³ãã¦ã®ã¹ã¯ãã¼ã«ã¨ããçãã¦ã¦ã¨ã¦ããããã
ã¨ãããã¨ã§éã¯ããããã
Event.observe(canvas, 'touchmove', function(event) { event.preventDefault(); // <- éè¦ world.moveFingersTo(event.touches); }, false);
ã¤ãã³ããªãã¸ã§ã¯ãã®preventDefaultã¡ã½ãããå¼ã¹ã°ããã©ã«ãã®åä½ãæãããã模æ§ãããã«ãªããªãæ°ã¥ããªãã¦ãã°ããã¯ã¾ã£ãã
onOrientationChange
æ¬ä½ã®å¾ãã®å¤æ´ã90度åä½ã§åãããå®éã¯éãã«åããã¨ãã¯ä½ãã¤ãã³ããçºçããªãã®ã§0, +90, -90ã®3種é¡ã ãã©ãæ¬ä½ã®åãèªä½ã¯widow.orientationã§åãã¦ãå®ä¾ã¯ãããªæãã«ãªãã
Event.observe(window, 'orientationchange', function(e) { window.scrollTo(0, 1); world.adjustGravity(); }, false);
adjustGravity: function() { switch (window.orientation) { case 0: this.engine.gravity = new Vector(0, 3); return; case 90: this.engine.gravity = new Vector(-4, 0); return; case -90: this.engine.gravity = new Vector(4, 0); return; } },
ãã¼ã«ã«ã«ãã¼ã¿ãä¿å
iPhoneã®Safariã¯SQLiteãå é¨ã«æã£ã¦ãã¦JSããå©ç¨ã§ãããã ããã¢ããªã®è¨å®ããã¤ã¹ã³ã¢ãªããã¯ç°¡åã«åã£ã¦ããããããã以ä¸ã«è¤éãªæ§é ãæã¤ãã®ã§ãRDBã«çªã£è¾¼ãããããªãã®ãªã大ä¸å¤«ã
ä¾ã¯ããã
// DBãã¡ã¤ã«ä½ã£ã¦ var db = openDatabase('paiTouch'); db.transaction(function(tx) { // ãã¼ãã«ä½ã£ã¦ tx.executeSql( 'CREATE TABLE settings (id INTEGER PRIMARY KEY, size REAL, pressure REAL, selected INTEGER)', [], function(tx, rs) {}, function(error) {alert('Database Creation Error: ' + error.message)} ); // åæãã¼ã¿æå ¥ tx.executeSql( 'INSERT INTO settings (size, pressure, selected) VALUES (?, ?, ?)', [90, 10, 1], function(tx, rs) {}, function(error) {alert('Insertion Default Value Error: ' + error.message)} ) });
è¦ããã«executeSqlé¢æ°ä½¿ãã°ãªãã§ãã§ããã
ãã¼ã ãã[è¨å®]->[Safari]->[Databases]ããã©ãã°è¨å®ç»é¢ãéãã®ã§ãã¼ã¿ãã¼ã¹ã®ç¢ºèªãåé¤ã¯ããã§ããã®ä»ãç´°ããã¨ããã¯ã°ã°ãã¾ãããã
ãã¾ãã«metaã¿ã°ãããï¼ã¤
Ajaxianã«è¼ã£ã¦ãã
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" /> <meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
ãããªæãã«ããã°Webã¢ããªãããã¼ã ç»é¢ã«è¿½å ããã¦ãã¢ããªã¢ã¤ã³ã³ã¯ãªãã¯ã§éå§ããã¨ãã«ãã©ã¦ã¶ã®ã¢ãã¬ã¹ãã¼ã¨ãé²ãæ»ããã¿ã³ã¨ãã表示ãããªããªã£ã¦ããã³ãã®ã¢ããªã£ã½ããªãï¼å·¦ï¼ã
ãã ããã°ãªã®ãä½ãªã®ãããããããªããã©ãããããã¨onOrientationChangeãçºçããªããªãã¿ãããã¾ããå¯è»¢ãã£ã¦iPhoneå¼ã£ã¦ãã¨ãã«ã¯éã«ä¾¿å©ããç¥ããªããpaiTouchã¯å¾ããã¨ãã«éåã®åãå¤ãã¦ãã®ã§ã¡ãã£ã¨æ®å¿µã
ã¨ãããã以ä¸ã®ãããªç¹ãæ°ã«ããã°iPhone SDKã¨ã使ããªãã¦ãHTMLã¨JSã ãã§ãããªãã«ã¢ããªã£ã½ããã®ãä½ãããèå³ãã人ã¯è©¦ãã¦ã¿ãã°ããã¨æãã