JavaScript事件的分類和介紹
1、關於事件
在我們使用JavaScript編寫指令碼語言時,會發現我們會常常用到各種事件,如簡單的單擊事件onclick (通過滑鼠點選觸發事件), onkeydown(鍵盤事件 按下鍵盤上任意健值觸發)等等, 通過對這些事件的設定,javascript可以觸發網頁中設定好的事件, 事件的觸發可以是使用者的行為,也可以是瀏覽器的行為 事件通常有這幾種案例, 元素被點選時, 頁面載入完後,元素被滑鼠經過時, 或者HTML的input標籤改變時 事件通常有以下幾種.
2、HTML標籤內聯事件
在學習JavaScript初始時,我們常用到HTML的內聯屬性(需要注意的是,這種方法儘量避免使用因為不利於維護修改 除非必須使用)
程式碼如下:
<inputtype="button"name="btn" id="btn"onclick="alert('HTML內聯屬性')"value="按鈕"/>
//原理是在input標籤中使用按鈕button樣式,並且在裡面加入onclick(滑鼠單擊事件)通過點選按鈕,頁面載入後彈出alert裡面的字串.
3、DOM屬性繫結事件
通過對頁面元素、節點、標籤、ID的獲取,然後使用對應的事件.
程式碼如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>汐玬紗個人部落格</title> <meta name="keywords" content="汐玬紗,個人部落格" /> <meta name="description" content="這是我的部落格網站" /> <!--css部分--> <styletype="text/css"> *{margin: 0; padding: 0;} #box{width: 100px;height: 100px;} </style> <!--js部分--> <scripttype="text/javascript"> window.onload=function(){ var oBox=document.getElementById('box'); oBox.onmouseover=function (){ alert('你經過了這個DIV盒子'); }; }; </script> </head> <body> <!--body部分--> <div id="box"></div> </body> </html>
4、常用的事件
4.1、滑鼠事件集合
onclick 滑鼠單擊元素時觸發
ondbclick 滑鼠雙擊元素時觸發
onmouseover 滑鼠經過元素時觸發
onmouseout 滑鼠離開元素時觸發
onmousemove 滑鼠在元素移動時觸發
onmousedown 滑鼠的按鍵按下時觸發
onmouseup 滑鼠的按鍵鬆開時觸發
oncontextmenu 滑鼠的右鍵開啟上下文選單時觸發
onmouseenter滑鼠指標移動到元素上觸發
onmouseleave 滑鼠指標移出元素時觸發
4.2、鍵盤事件集合
onkeydown 任意鍵盤上的按鍵被按下時觸發
onkeyup 任意鍵盤上的按鍵被送開時觸發
onkeypress 任意鍵盤上的按鍵被按下並且鬆開時
4.3、框架/物件(Frame/Object)事件
4.4、表單事件
4.5、剪貼簿事件
4.6、列印事件
4.7、拖動事件
4.8、多媒體(Media)事件
4.9、動畫事件
4.10、過渡事件
4.11、其他事件
4.12、目標事件物件
4.13、事件監聽物件
4.14、文件事件物件
4.15、滑鼠/鍵盤事件物件
4.16、滑鼠/鍵盤事件物件
altKey 觸發時返回檢測"Alt"健是否被按下
button 觸發時返回當前哪個滑鼠按鍵被按下
clientX 觸發時返回當前事件滑鼠的X軸的座標值
clientY 觸發時返回當前事件滑鼠的Y軸的座標值
ctrlKey 觸發時返回當前Ctrl鍵是否被按下
Location 觸發時返回按鍵在鍵盤上的位置
charCode 觸發時返回onkeypress鍵值的字母程式碼
key 觸發時返回當前按鍵按下的識別符號
keyCode 返回按下鬆開鍵盤按鍵的值,或按下/鬆開鍵盤事件的值
which 返回按下鬆開鍵盤按鍵的值,或按下/鬆開鍵盤事件的值
metaKey 返回當前事件被觸發時,"meta"鍵是否被按下
relatedTarget 返回與事件的目標節點相關的節點
screenX 返回當某個事件被觸發時,滑鼠指標的水平座標
screenY 返回當某個事件被觸發時,滑鼠指標的垂直座標
shiftKey 返回當事件被觸發時,"SHIFT"鍵是否被按下
initMouseEvent() 初始化滑鼠事件物件的值
initKeyboardEvent() 初始化鍵盤事件物件的值
今天,我在這裡要講的是關於鍵盤滑鼠事件的一部份應用以及程式碼案例.
首先,我要講的是關於event物件, event物件表示事件當前的狀態, 例如觸發event物件的元素後,滑鼠的位置及其狀態,或者當前按下鍵盤上的鍵位等等.需要注意的是event物件只在發生的過程中有效. event的某些屬性值對待定的事件有意義. 就像:fromElement 和toElement 屬性只對onmouseover 和 onmouseout事件有意義.下面我們從event物件常用的獲取當前滑鼠的座標值開始說, 首先我們需要知道獲取滑鼠當前座標值的事件.
clientX(獲取當前滑鼠X軸的座標值)
clientY(獲取當前滑鼠Y軸的座標值)
案例一,任意點選頁面.任意位置彈出對話方塊
程式碼如下:
<script type="text/javascript">
//文件物件模型.滑鼠單擊時,執行右邊的函式
document.onclick=function (){
//彈出對話方塊
alert('您點選了頁面!');
};
</script>
以上程式碼能夠實現在頁面任意位置滑鼠單擊彈出對話方塊.
在做這個例子的時候,我使用過
document.body=function (){alert('你點選了當前頁面!');};
但是我發現,在瀏覽器頁面瀏覽時,我並沒有得到想要的結果. 在苦苦思索後,我找到了原因, 我通過 文件物件 的主體body 內容部分.滑鼠單擊時,彈出 對話方塊. 但是,當前情況下
我的網頁檔案內,body是沒有任何東西的,so 我的滑鼠單擊body彈出對話方塊無效,因為body內並沒有任何元素時,(除非我設定body的高度,不然body的實際預設高度是為零的),一般
body的高度是我們在主體部分寫的元素撐開的高度,而當前內容為空時,body的高度為零,所以我無論怎麼點選頁面,都不會執行我的js程式碼塊.
tagName(標籤名) <之前我們常常使用這個函式getElementsByTagName 通過標籤名獲取元素> .
隨後我做了一系列修改 然後我使用( chilaNodes )彈出document的節點.
程式碼如下:
//文件物件模型.滑鼠單擊時,執行右邊的函式
document.onclick=function (){
//彈出對話方塊
alert('您點選了頁面!');
alert(document.childNodes[0].tagName);
};
需要注意的是childNodes相容性不是那麼完美,所以當下,我使用IE瀏覽器進行測試, 我們得了一個 ! 歎號 然後我找到了網頁頁面文件 的文件型別<!DOCTYPE html> 由此可見,
我們通過document 獲取的節點是網頁節點中的第一個節點 (也是最大的節點) 然後, 我再 用alert 彈出 childNodes[1] 然後我們 看到 頁面載入完成後 , 彈出了HTML 我們再返回
網頁中檢視 節點可以看到 HTML 元素節點是除了 文件型別 !DoCTYPE 之後的第二大 元素節點 . 從這裡我們可以看出. document 包含了最大的 節點<!DOCTYPE html>因為我
們彈出它的第一個子節點時,得到了 <!DOCTYPE html> (非普通的元素節點是文件說明 文件的型別)可以看出 , document 它是一個隱性節點 在文件的 最外面 .包含著所有的頁面
元素. 所以 我們通過document 點選頁面任意位置時 (作用域最大) 所以能實現 通過點選document 彈出對話方塊.
案例二,點選頁面任意 位置 彈出當前位置的X軸 Y軸 座標程式碼如下:
window.onload=function (){
document.onclick=function (){
//彈出當前頁面的 X軸加Y軸的滑鼠座標值
alert(event.clientX+','+event.clientY);
};
};
但是我發現 , 這樣寫程式碼有相容性問題 IE瀏覽器能獲取 而火狐 谷歌瀏覽器 不相容 火狐和谷歌瀏覽器的核心 下面我做一個處理瀏覽器相容性 .
程式碼如下:
<span style="font-size:14px;">document.onclick=function (ev){alert(ev.clientX+','+ev.clientY);};</span>
通過檢測 這段程式碼的相容性比之前好很多.相容IE9以上的IE瀏覽器 相容火狐 相容谷歌 ,IE9相容性已經很好了. 但是想完美相容IE9以下還是不行,得繼續做修改.相容性處理。
做相容處理的辦法:用if else 去判斷在哪個瀏覽器為真true (真) 如果為真,瀏覽器相容 就會執行以下程式碼塊 否則就 彈出false(假 ) 執行else 的程式碼塊 瀏覽器對此不相容
document.onclick=function (ev){
//如果滿足ev為真
if(ev){
//彈出true真!
alert(true);
}
//否則 不滿足時
else{
//彈出false 假
alert(false);
}
};
通過這段程式碼,我們還能對程式進行改進 document.onclick=function (ev){
//如果滿足ev為真
if(ev){
//彈出在相容火狐谷歌瀏覽器的程式碼塊!
alert(ev.clientX+','+ev.clientY);
}
//否則 不滿足時彈出相容IE瀏覽器的程式碼塊
else{
//彈出false 假
alert(event.clientX+','+event.clientY);
}
};
在IE、火狐、谷歌瀏覽器執行程式碼後、我們可以看到程式已經完美的相容各版本的瀏覽器了 (處理相容的另一種寫法如下)
//處理相容問題的第二種寫法
window.onload=function (){
document.onclick=function (ev){
//宣告一個變數 使用當相容ev(火狐、谷歌)或 event(IE)
var oEvent=ev || event;
//彈出當前程式碼塊
alert(oEvent.clientX+','+oEvent.clientY);
};
};
*需要注意的是 在第二種相容性寫法中, 我們用到了邏輯運算子號, || 與 讓變數值等於右邊 只要兩邊的條件滿足其一的時候就使用任意值 (只要有真true即真)
在點選時間的無參函式中, 我們必須加上ev (相容非IE的寫法中,瀏覽器是需要向形參傳一個系統的引數過來的) ev是形參 使得當前滑鼠單擊事件成為有參函式.
!在這裡我不得不說事件冒泡(這是使用事件時尤為需要注意的事情) 以下我通過一個案例 更好的說明 什麼是冒泡事件
css部分
<style type="text/css">
div{padding: 40px; cursor: pointer;}
#box1{background: pink;}
#box2{background: plum;}
#box3{background: aqua;}
</style>
HTML body部分
<body>
<div id="box1">盒子一
<div id="box2">盒子二
<div id="box3">盒子三</div>
</div>
</div>
</body>
js部分
window.onload=function (){
//宣告變數 通過標籤獲取元素
var aDiv=document.getElementsByTagName('div');
//迴圈所有的div
for(var i=0;i<aDiv.length;i++){
//當 div任意一個被點選時
aDiv[i].onclick=function(){
//彈出 當前 div的盒子內容
alert(this.innerHTML);
}
}
我們會發現,我們點選最外面的大盒子時 會彈出盒子一 點選大盒子裡麵包著的第二個盒子時 會彈出 盒子二 點選最小的盒子的時候 會彈出盒子三
其實,當我們點選第二個盒子就會發現,點選完畢後 彈出了兩個值 盒子二 和 盒子一 當我們點選盒子三的時候, 返回了三個值 盒子三 盒子二 盒子一 從HTML中的程式碼中我們可以
看見 ,盒子屬於層疊關係 . 大家這時候會想到 因為盒子 三 在最裡面呀 這麼彈出值, 也很正常 .(其實這就是冒泡事件!)
首先我們要理解 事件是客戶端操作進行發生的事件驅動 即某個事件被使用者 /瀏覽器觸發 從而做出相應的動作
冒泡機制 :相信大家都見過撲通的水裡 冒泡 從最深處 慢慢的一個氣泡往水面上冒在上身的過程中 ,我們可以看到 氣泡經過不同深度層次的水 我們可以把水看成我們的文件結
構DOM樹 這麼氣泡 就相當於我們的事件 被出發後 氣泡從DOM樹的最底 層 一層一層的往上直至(水面) DOM樹的根節點.
顯而易見 (時間冒泡通常會觸發頁面內所有的事件這並不是我們想要的結果) 因此我們要禁止事件冒泡
顯示隱藏案例禁止冒泡程式碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>禁止冒泡</title>
<style type="text/css">
div{width: 100px; height: 100px; margin: 0 auto; background: aqua; border: 1px solid paleturquoise;}
</style>
<script type="text/javascript">
window.onload=function (){
var oBtn=document.getElementById('btn');
var oBox=document.getElementById('box');
oBtn.onclick=function (){
if (oBox.style.display=='none') {
oBox.style.display='block';
} else{
oBox.style.display='none';
}
};
//點選document最大的文件物件 讓盒子隱藏
document.onclick=function (){
oBox.style.display='none';
};
};
</script>
</head>
<body>
<input type="button" name="btn" id="btn" value="按鈕" />
<div id="box" class="box"></div>
</body>
</html>
通過以上程式碼,我們能實現普通的頁面效果是 滑鼠單擊按鈕時 讓隱藏訊息的盒子出現 通常是選擇 選項 期間如果我們後悔了 通過點選盒子外面的任意一處 讓盒子隱藏
以上程式碼實現了 點選按鈕實現盒子顯示, 點選盒子外任意位置 讓盒子隱藏 (但當我們 發現 點選按鈕讓盒子顯示的時候 卻發現 盒子不顯示 ) 這就是冒泡事件 通過找到input按鈕的元素節點 我們實現點選按鈕實現 div盒子的隱藏顯示 點選盒子外任意位置隱藏盒子 但是 現在程式碼不顯示是因為冒泡事件 當按鈕的單擊事件被觸發時,就像水滴有了一個氣泡,這個氣泡會一層一層往上 直至出現在水面 我們設定了通過按鈕顯示隱藏 div 通過點選document 隱藏div 按鈕點選顯示div被觸發後 冒泡事件迅速的一層一層去往上走 經過document(頁面的最大隱性節點水面)的滑鼠單擊事件時, 也順帶觸發了document的隱藏事件. (因此我們需要消除事件冒泡!)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>禁止冒泡</title>
<style type="text/css">
div{width: 100px;display: none; height: 100px; margin: 0 auto; background: aqua; border: 1px solid paleturquoise;}
</style>
<script type="text/javascript">
window.onload=function (){
var oBtn=document.getElementById('btn');
var oBox=document.getElementById('box');
oBtn.onclick=function (ev){
//相容性處理
var iEvent=ev || event;
if (oBox.style.display=='none') {
oBox.style.display='block';
} else{
oBox.style.display='none';
}
//取消冒泡事件 當事件冒泡為真的時候 取消事件冒泡
iEvent.cancelBubble=true;
};
//點選document最大的文件物件 讓盒子隱藏
document.onclick=function (){
oBox.style.display='none';
};
};
</script>
</head>
<body>
<input type="button" name="btn" id="btn" value="按鈕" />
<div id="box" class="box"></div>
</body>
</html>
通過event物件 實現div盒子跟隨滑鼠移動效果clientX(獲取當前滑鼠X軸的座標值)
clientY(獲取當前滑鼠Y軸的座標值)
案例程式碼如下<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>div跟隨滑鼠</title>
<style type="text/css">
*{margin: 0; padding: 0;}
#box{width: 100px; height: 100px; background: aqua; position: absolute;}
</style>
<script type="text/javascript">
//文件物件 滑鼠移動事件(只要元素內移動一畫素就會觸發)
document.onmousemove=function (ev){//ev形參 ev (相容非IE的寫法中,瀏覽器是需要向形參傳一個系統的引數)
//event相容性處理 ev相容火狐 谷歌 event相容IE
var oEvent=ev||event;
//通過id找到元素盒子
var oBox=document.getElementById('box');
//盒子距離左邊的值 等於獲取當前滑鼠的X軸座標+畫素
oBox.style.left=oEvent.clientX-50+'px';
//盒子距離頭邊的值 等於獲取當前滑鼠的Y軸座標+畫素
oBox.style.top=oEvent.clientY-50+'px';
};
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
但是隨後我們便發現了這樣寫的一個bug 滑鼠隨著瀏覽器滾動條滾動後 box div盒子無法繼續再跟隨滑鼠了 因為 我們給予滑鼠跟隨 的是clientX和clientY瀏覽器 當前視覺化介面視窗的值 而返回的滑鼠座標點是以左上角為零點 當頁面向下滑動時隱藏的頭部 和頁面向右滾動 隱藏的左邊 頁面也需要加在裡面. 因此我們對程式碼進行一個完善.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>div跟隨滑鼠</title>
<style type="text/css">
*{margin: 0; padding: 0;}
body{width: 2000px; height: 2000px;}
#box{width: 100px; height: 100px; background: aqua; position: absolute;}
</style>
<script type="text/javascript">
//文件物件 滑鼠移動事件(只要元素內移動一畫素就會觸發)
document.onmousemove=function (ev){//ev形參 ev (相容非IE的寫法中,瀏覽器是需要向形參傳一個系統的引數)
//event相容性處理 ev相容火狐 谷歌 event相容IE
var oEvent=ev||event;
//通過id找到元素盒子
//scrollTop 相容性處理 相容火狐 谷歌 或 相容IE
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
var oBox=document.getElementById('box');
//盒子距離左邊的值 等於獲取當前滑鼠的X軸座標+畫素
oBox.style.left=oEvent.clientX+scrollTop-50+'px';
//盒子距離頭邊的值 等於獲取當前滑鼠的Y軸座標+畫素
oBox.style.top=oEvent.clientY+scrollLeft-50+'px';
};
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
通過案例 我們可以看到clientX和clientY 獲取滑鼠當前的座標 這兩個事件我們經常使用 由此我們可封裝成一個函式 以便呼叫 封裝函式中,我們加入了相容火狐谷歌 IE 與scrollTop和scrollLeft的值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>div跟隨滑鼠</title>
<style type="text/css">
*{margin: 0; padding: 0;}
body{width: 2000px; height: 2000px;}
#box{width: 100px; height: 100px; background: aqua; position: absolute;}
</style>
<script type="text/javascript">
//獲取當前滑鼠的座標值
function getPos(ev){//ev形參 是下面相容處理後傳過來的<span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;">oEvent</span></span>
<span style="white-space: pre;"> </span><span style="color:#ff0000;">var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; //相容火狐谷歌 || 相容IE
var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;</span>
//返回當前值
return {x: <span style="color:#ff0000;">ev</span>.clientX+scrollLeft, y: ev.clientY+scrollTop}; <span style="color:#ff0000;">//josn的寫法 儲存資料</span>
} //ev 表示傳來的形參 oEvent
document.onmousemove=function (ev){
var oEvent=ev||event;
var oBox=document.getElementById('box');
var pos=getPos(oEvent);
oBox.style.left=pos.x-50+'px';
oBox.style.top=pos.y-50+'px';
};
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
在這裡面我們用到了json
json使用語法 var json{X:2,Y:4};
迴圈只能用 for in for(var i in json){ };
彈出json的值:alert(i+'='+json.X); //寫在for in 迴圈裡面
i代表的是誰 X代表X的值 在這裡面 i 代表這 json 裡面的 X 而X則代表了X的值2.
關於json 程式碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
//json 儲存了變數X 與 Y 之間用,逗號隔開
var json={X:88,Y:99};
for(var i in json){
//i代表了json裡面的變數 X代表了變數的值 使用for in 會依次彈出所有儲存變數的值
alert(i+','+json.X);
}
</script>
</head>
<body>
</body>
</html>
N個DIV跟隨滑鼠案例:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無標題文件</title>
<style>
div {width:30px; height:30px; background:red; position:absolute; border-radius:50% ;}
div:nth-child(3n-1){background: palegreen;}
div:nth-child(3n-2){background: aquamarine;}
div:nth-child(3n){background: powderblue;}
</style>
<script>
function getPos(ev)
{ //相容處理 scrollTop documentElement相容火狐谷歌 ||或 body 相容IE 的scrollTop獲取
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
var scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft;
//返回值 陣列json的寫法 X Y在裡面是 變數 ev代表傳回的形參 oEvent oEvent.clientX+scrollLeft 滑鼠當前的視覺化介面的值加上 滾動條左邊的距離
return {x: ev.clientX+scrollLeft, y: ev.clientY+scrollTop};
}
//文件 滑鼠移動一個畫素時觸發 形參
document.onmousemove=function (ev)
{ //通過標籤獲取元素 通常使用這種方法獲取了元素後 需要使用for 迴圈遍歷到每一個標籤元素上面
var aDiv=document.getElementsByTagName('div');
//相容性處理 oEvent 賦值= ev相容火狐 谷歌|| event相容IE
var oEvent=ev||event;
//宣告pos變數 將函式獲取當前頁面視覺化 翻滾的頭部左邊的 滑鼠值返回
var pos=getPos(oEvent);
//從最後一個DIV開始循壞 當i>0迴圈到了第一個時 再i-- <逆向迴圈>
for(var i=aDiv.length-1;i>0;i--)<span style="color:#ff0000;">//當i等於零的時候就是滑鼠停止移動了</span>
{ //任意一個的div 等於 前面的一個div的距離左邊的值減一-1代表前一個
aDiv[i].style.left=aDiv[i-1].offsetLeft+'px';
aDiv[i].style.top=aDiv[i-1].offsetTop+'px';
}
//迴圈完上面的所有div後<從後開始迴圈到前面>但是需要第一個div特別的跟著滑鼠走
//陣列的迴圈都是從零開始 這裡下標零等於是第一個div
//第一個div距離左邊的值等於json資料體的X軸的值加畫素 下面同上
aDiv[0].style.left=pos.x+'px';
aDiv[0].style.top=pos.y+'px';
};
</script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
</html>
滑鼠事件都有個on在前面 onclick onmouseover 等等
接下的案例是利用event物件 使用鍵盤控制div移動鍵盤上每個按鍵都有一個健值,所以 通過這個健值 我們能達到通過鍵盤控制頁面的元素
鍵盤事件:onkeydown 鍵盤按下 的時候 觸發keyCode 彈出當前鍵盤 按鍵 鍵值
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>鍵盤健值</title>
<script>
//頁面文件 按鍵按下觸發事件 執行右邊的函式 ev形參
document.onkeydown=function (ev)
{ //event相容性處理 ev相容谷歌火狐 event相容IE
var oEvent=ev||event;
//彈出 返回當前值 keyCode
alert(oEvent.keyCode);
};
</script>
</head>
<body>
</body>
</html>
以上程式碼執行後能夠彈出當前按鍵的值 利用鍵盤控制div的移動
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>鍵盤控制</title>
<style type="text/css">
#box{width: 100px; height: 100px; position: absolute; background: pink;}
</style>
<script type="text/javascript">
//網頁文件 鍵盤按下任意鍵觸發 執行右邊的函式
document.onkeydown=function (ev){
//event相容性處理 ev相容火狐 谷歌 || event相容IE
var oEvent=ev||event;
//通過ID獲得元素
var oBox=document.getElementById('box');
//判斷當返回的按鍵值是等於37時
if (oEvent.keyCode==37) {
//div盒子距離左邊的值 等於盒子距離左邊的值-100加畫素 <因為向左邊移動是負數>
oBox.style.left=oBox.offsetLeft-100+'px';
}
//當返回按下的減值是等於39時,
else if(oEvent.keyCode==39){
//讓div盒子距離左邊的值 向右移動100畫素 <向右移動是正數>
oBox.style.left=oBox.offsetLeft+100+'px';
}
//當返回的按鍵值是38時
if (oEvent.keyCode==38) {
//我們讓盒子距離上邊的距離 每次-100畫素 向上是負數
oBox.style.top=oBox.offsetTop-100+'px';
}
//當返回的按鍵值是40時 代表我們按的是下標鍵
else if(oEvent.keyCode==40){
//讓盒子距離上面的值每次加100 向下移動 是整數
oBox.style.top=oBox.offsetTop+100+'px';
}
}
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>
執行以上程式碼後,我麼能通過鍵盤上的上下左右按鍵控制盒子的移動下面是通過回車鍵提交表單裡面的留言 和通過ctrl鍵加Enter鍵提交留言
第一個通過回車提交留言
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>回車提交留言</title>
<style type="text/css">
*{margin: 0;padding: 0; font-size: 14px; color: #FF0000;}
input{display: block; margin: 0 auto; width: 400px; height: 20px; background: aquamarine; border: 1px solid orangered;}
textarea{display: block; background: #f5f5f5; margin: 0 auto; width: 400px; height: 200px;}
</style>
<script type="text/javascript">
//網頁文件內 鍵盤任意鍵按下執行 右邊的函式 ev形參 向非IE瀏覽器返回一個值
document.onkeydown=function (ev){
//相容性處理 ev相容火狐 谷歌 || event相容IE瀏覽器
var oEvent=ev||event;
//通過IE獲取元素
var oTxt=document.getElementById('txt1');
var oBox=document.getElementById('txt2');
//當鍵盤按下的值是 13時
if (oEvent.keyCode==13) {
//讓文字域的值 等於文字框的值 加換行 += 是 oBox.value=oBox.value+oTxt.value 保留原本的值加上現在提交的值
oBox.value+=oTxt.value+'\n';
//每次提交完後 清空文字框的內容
oTxt.value='';
}
};
</script>
</head>
<body>
<input type="text" name="txt1" id="txt1"/>
<textarea id="txt2"></textarea>
</body>
</html>
只能按住Ctrl加Enter鍵 提交回復<js程式碼如下> <script type="text/javascript">
//網頁文件內 鍵盤任意鍵按下執行 右邊的函式 ev形參 向非IE瀏覽器返回一個值
document.onkeydown=function (ev){
//相容性處理 ev相容火狐 谷歌 || event相容IE瀏覽器
var oEvent=ev||event;
//通過IE獲取元素
var oTxt=document.getElementById('txt1');
var oBox=document.getElementById('txt2');
//當鍵盤按下的值是 13時
if (oEvent.keyCode==13 && oEvent.<span style="color:#ff0000;">ctrlKey</span>) { //&&與 滿足兩邊的條件 才執行下面程式碼 ctrlKey <代表<span style="color:#3366ff;">Ctrl</span>鍵>
//讓文字域的值 等於文字框的值 加換行 += 是 oBox.value=oBox.value+oTxt.value 保留原本的值加上現在提交的值
oBox.value+=oTxt.value+'\n';
//每次提交完後 清空文字框的內容
oTxt.value='';
}
};
</script>
ctrlKey、shiftKey、altKey 三個事件 ctrlKey 代表Ctrl鍵 shiftKey 代表Shift鍵 altKey 代表Alt鍵