### 鍵盤事件
- `keyCode`
- 獲取用戶按下鍵盤的哪個鍵:`onkeydown` / `onkeyup`
- 例子:鍵盤控制 `Div` 移動
- 其它屬性
- `ctrlKey`、`shiftKey`、`altKey`
- 例子:提交留言
- 回車提交
- CTRL + 回車 提交
- 代碼:
```HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>鍵盤控制元素移動和回車提交</title>
<link rel="stylesheet" href="../reset.css">
<style>
/* 評論區 */
#div_comments {
position: absolute;
display: block;
padding-top: 20px;
width: 640px;
background-color: rgb(252, 229, 200);
}
#div_com_inp {
margin-top: 5px;
border-top: burlywood dashed 1px;
border-bottom: burlywood dashed 1px;
}
.text {
margin: 20px 0 20px 53px;
}
.btn {
margin: 20px 0 20px 20px;
width: 70px;
height: 70px;
}
#div_com_show {
height: 200px;
margin: 20px 50px;
padding: 0px 20px;
background-color: rgb(255, 255, 255);
overflow: hidden;
}
.li_comment {
white-space: pre-wrap;
padding: 10px 5px;
float: none;
border-bottom: cadetblue dashed 1px;
opacity: 0;
filter: alpha(opacity=0);
overflow: hidden;
}
</style>
<script>
// 封裝 getElementById 函數
function get(id) {
return document.getElementById(id);
}
window.onload = function () {
// var oDiv = get('div1');
// document.onkeydown = function () {
// var ev = event||ev;
// if (ev.keyCode === 37) {
// oDiv.style.left = oDiv.offsetLeft - 10 + 'px'
// } else if (ev.keyCode === 39) {
// oDiv.style.left = oDiv.offsetLeft + 10 + 'px'
// } else if (ev.keyCode === 38) {
// oDiv.style.top = oDiv.offsetTop - 10 + 'px'
// } else if (ev.keyCode === 40) {
// oDiv.style.top = oDiv.offsetTop + 10 + 'px'
// }
// }
//獲取Div元素
var oDiv = document.getElementById("div_comments");
//創建各個方向條件判斷初始變量
var left = false;
var right = false;
var top = false;
var bottom = false;
//當按下對應方向鍵時,對應變量為true
document.onkeydown = function(ev){
var oEvent = ev || event;
var keyCode = oEvent.keyCode;
switch(keyCode){
case 37:
left=true;
break;
case 38:
top=true;
break;
case 39:
right=true;
break;
case 40:
bottom=true;
break;
}
};
//設置一個定時,時間為50左右,不要太高也不要太低
setInterval(function(){
//當其中一個條件為true時,則執行當前函數(移動對應方向)
if(left){
oDiv.style.left = oDiv.offsetLeft-10+"px";
}else if(top){
oDiv.style.top = oDiv.offsetTop-10+"px";
}else if(right){
oDiv.style.left = oDiv.offsetLeft+10+"px";
}else if(bottom){
oDiv.style.top = oDiv.offsetTop+10+"px";
}
},30);
//執行完后,所有對應變量恢復為false,保持靜止不動
document.onkeyup = function(ev){
var oEvent = ev || event;
var keyCode = oEvent.keyCode;
switch(keyCode){
case 37:
left=false;
break;
case 38:
top=false;
break;
case 39:
right=false;
break;
case 40:
bottom=false;
break;
}
}
// btn 提交
var btn = get('btn_comment');
var txt = get('text_comment');
var board = get('div_com_show');
btn.onclick = function () {
if (true) {
var oP = document.createElement('p');
oP.innerHTML = txt.value;
txt.value = '';
if (board.children.length > 0) {
board.insertBefore(oP,board.children[0])
} else {
board.appendChild(oP);
}
}
}
// ctrl + enter 提交
txt.onkeydown = function (ev) {
var ev = ev||event;
if (ev.keyCode === 13 && ev.ctrlKey) {
var oP = document.createElement('p');
oP.innerHTML = txt.value;
txt.value = '';
if (board.children.length > 0) {
board.insertBefore(oP,board.children[0])
} else {
board.appendChild(oP);
}
}
}
}
</script>
</head>
<body>
<div id="div_comments">
<div id="div_com_inp">
<textarea class="text" name="" id="text_comment" cols="60" rows="5"></textarea>
<input class="btn" type="button" name="" id="btn_comment" value="發表評論">
</div>
<div id="div_com_show">
<p>CTRL + 回車 提交</p>
<p>鍵盤控制留言框位置</p>
</div>
</div>
</body>
</html>
```
- 前言
- 初探 JavaScript 魅力
- JavsScript 是什么
- 第一個 JS 特效:鼠標提示框
- 網頁換膚和 if 判斷
- 函數傳參
- 循環 while 和 for
- 導航欄選項卡
- JS 簡易日歷
- JavaScript 基礎
- JavaScript 組成
- 變量類型
- 變量類型轉換
- 變量的作用域和閉包
- 命名規范
- 運算符
- 程序流程控制
- JSON
- 深入 JavaScript
- 函數返回值
- 函數傳參與行間樣式
- 數組基礎操作
- 定時器的使用
- 定時器的作用
- 數碼時鐘
- Date 對象其它方法
- 延時提示框
- 無縫滾動
- DOM基礎應用
- DOM 基礎
- DOM 節點
- 操作元素屬性
- DOM 元素靈活查找
- DOM 操作應用
- 創建、插入和刪除元素
- 文檔碎片
- DOM操作應用高級
- 表格標簽
- 表格應用
- 表單應用
- JS 運動基礎
- 運動基礎
- 運動框架及應用
- 緩沖運動
- 運動的停止條件
- JS 運動應用
- 多物體運動框架
- 任意值運動框架
- 仿 Flash 圖片展示
- JS 運動中級
- 鏈式運動框架
- 完美運動框架
- 運動框架總結
- 運動框架應用
- JS事件基礎
- Event 對象和事件
- 鼠標事件
- 鍵盤事件
- JS 事件中級
- 默認事件
- 拖拽
- JS 事件高級應用
- 事件綁定
- 高級拖拽
- 自定義滾動條
- Ajax 基礎
- Ajax 是什么
- 使用 Ajax
- Ajax 原理
- Ajax 中級
- 編寫 Ajax
- Ajax 數據
- JS 面對對象基礎
- 面對對象是什么
- JS 中的面對對象
- 第一個面對對象的程序
- 工廠方式
- 原型:Prototype
- 面對對象編程方式
- JS 面對對象實例
- 面對對象的選項卡
- JS 面對對象高級
- Json 方式的面向對象
- 拖拽和繼承
- 使用繼承
- 系統對象
- BOM 應用
- BOM 基礎
- 尺寸及坐標
- 常用方法和事件
- COOKIE 基礎與應用
- 什么是 cookie
- 使用 cookie
- JS 中的正則表達式
- 正則表達式基礎
- 字符串與正則配合
- 字符串
- 量詞
- 常用正則例子
- JS Template 模板引擎
- 特性
- 語法
- 實例
- 表達式和運算符分類
- 主要表達式
- 左表達式
- 自增和自減
- 一元運算符
- 算術運算符
- 關系運算符
- 相等運算符
- 位移運算符
- 二進制位運算符
- 二元邏輯運算符
- 條件(三元)運算符
- 賦值運算符