event.keyCode

event.keyCodeで押されたキーのキーコードを取得できるので、さっき作ったやつにショートカットキーを追加してみた。

Index: setinterval.html
===================================================================
--- setinterval.html	(revision 18)
+++ setinterval.html	(working copy)
@@ -1,6 +1,6 @@
 <html>
 <head>
-<title>setInterval</title>
+<title>setInterval / clearInterval / keyCode</title>
 <meta http-equiv="Content-type" content="text/html; charset=utf-8">
 <script language="javascript">
 <!--
@@ -23,14 +23,26 @@
 var timer;
 var isSliding;
 
-function nextImage(image, caption) {
-    if ( index >= myImages.length ) {
+function setImage(image, caption) {
+    if ( index < 0 ) {
+        index = myImages.length - 1;
+    } else if ( index >= myImages.length ) {
         index = 0;
     }
     document.getElementById(caption).innerHTML = myImages[index];
-    document.getElementById(image).src = myImages[index++];
+    document.getElementById(image).src = myImages[index];
 }
 
+function nextImage(image, caption) {
+    ++index;
+    setImage(image, caption);
+}
+
+function previousImage(image, caption) {
+    --index;
+    setImage(image, caption);
+}
+
 function startSlideShow() {
     timer = setInterval( "nextImage('imageBox', 'imageBoxCaption')", intervalTime );
     isSliding = 1;
@@ -69,6 +81,22 @@
     setIntervalTime(1000);
     startSlideShow();
 }
+
+document.onkeydown = function(event) {
+    var code = event.keyCode;
+    // 74:j
+    // 75:k
+    // 78:n
+    // 80:p
+    if ( code == 74 || code == 78 ) {
+        nextImage('imageBox', 'imageBoxCaption');
+    } else if ( code == 75 || code == 80 ) {
+        previousImage('imageBox', 'imageBoxCaption');
+    }
+
+    event.stopPropagation();
+}
+
 // -->
 </script>
 </head>
@@ -81,10 +109,19 @@
 <input type="submit" name="submit" value="変更する">
 </form>
 
+<p>
+以下のショートカットキーが使えます。<br>
+n, j : 次の画像<br>
+k, p : 前の画像<br>
+</p>
+<p>
 [<a href="javascript:toggleSlideShow()" id="slideState"></a>]
+</p>
+
 <p>
 <img src="" id="imageBox" border="0" />
 <div id="imageBoxCaption"></div>
-</script>
+</p>
+
 </body>
-</html>
? No newline at end of file
+</html>

SafariStandを使ってると文字を入力しただけで検索モードに入るのですが、onkeydownのなかでstopPropagation()してやると検索モードに入らずに済むようです。