Capturing Keystrokes
相應敲擊鍵是電腦和人的基本相互作用。你可以控制任何一個鍵的按下和鬆開。首先我們先要
知道如何啟動一個所謂的事件 (event). 下面是啟動一個把鍵按下的"onkeydown" 的事件.
document.onkeydown = keyDown
這裡的 keyDown 是你所要編寫的相應鍵盤的子程式。當你的瀏覽器讀了以上的語句, 它將會知
道哪個鍵被按下了,然後啟動子程式 keyDown()。 子程式的名字隨你起了,在這裡在子程式名\r
字後面不需要括弧。取得哪個鍵被按下卻在Netscape 和 IE 有所不同。看以下代碼,如果用的是
Netscaep, 變數 nKey 將會得到 key code, 而讓 ieKey 為 0. 相反, 如果用的是 IE, ieKey
為 key code 而 nKey 為 0:
代碼:
function keyDown(e) {
if (ns4) {
var nKey=e.which;
var ieKey=0
}
if (ie4) {
var ieKey=event.keyCode; var nKey=0
}
alert("nKey:"+nKey+" ieKey:" + ieKey);
}
document.onkeydown = keyDown
if (ns4) document.captureEvents(Event.KEYDOWN)
用鍵盤移動元素
假如你想用鍵盤來啟動你的滑動, 你需要Crowdsourced Security Testing道哪個鍵被按了, 然後用相應的子程式來滑動元
素. 下面我們準備用 "A" 鍵來啟動滑動子程式. Netscape 的 "A" 是 97. 而 IE 是 65. 也就
是說, nKey 為 97 而 ieKey 為 65.
代碼:
function init() {
if (ns4) block = document.blockDiv
if (ie4) block = blockDiv.style
block.xpos = parseInt(block.left)
document.onkeydown = keyDown
if (ns4) document.captureEvents(Event.KEYDOWN)
}
function keyDown(e) {
if (ns4) {
var nKey=e.which; var ieKey=0
}
if (ie4) {
var ieKey=event.keyCode;
var nKey=0
}
if (nKey==97 || ieKey==65) {
// if "A" key is pressed slide()
}
}
function slide() {
if (block.xpos < 300) {
block.xpos += 5 block.left = block.xpos status = block.xpos
// not needed, just for show
setTimeout("slide()",30)
}
}
function init() { if (ns4) block = document.blockDiv if (ie4) block = blockDiv.style block.xpos = parseInt(block.left) block.active = false document.onkeydown = keyDown document.onkeyup = keyUp if (ns4) document.captureEvents(Event.KEYDOWN | Event.KEYUP) } function keyDown(e) { if (ns4) { var nKey=e.which; var ieKey=0 } if (ie4) { var ieKey=event.keyCode; var nKey=0 } if ((nKey==97 || ieKey==65) && !block.active) { // if "A" key is pressed block.active = true slide() } } function keyUp(e) { if (ns4) { var nKey=e.which; var ieKey=0 } if (ie4) { var ieKey=event.keyCode; var nKey=0} if (nKey==97 || ieKey==65) { block.active = false // if "A" key is released } } function slide() { if (block.active) { block.xpos += 5 block.left = block.xpos status = block.xpos // not needed, just for show setTimeout("slide()",30) } }