十二、滑鼠事件
5. Ctrl、Alt、Shift鍵(Ctrl, Alt, Shift Keys)
Q:我如何檢測和按下Ctrl、Alt和Shift鍵一起的滑鼠事件。
A:在當今的瀏覽器中,指令碼可以檢測滑鼠事件發生時,使用者是否按下了Ctrl、Alt或者Shift鍵中任何一個。在下面的例子中,由MouseDown和MouseUp事件完成示範。而至於其它滑鼠事件,類似的方法可能達到效果,也可能達不到效果,這依賴於瀏覽器。
要實現Ctrl/Alt/Shift檢測,你可以使用屬性event.ctrlKey、event.altKey、event.shiftKey和不贊成使用的Navigator特有屬性event.modifiers。在該頁任何地方點擊滑鼠,同步選取Ctrl、Alt或者Shift,下面的指令碼(在本頁的<HEAD>地區)就會檢測到這個組合(譯者註:樣本在本頁上可能無法正常運行)。每次點擊滑鼠,你就會在瀏覽器的狀態列上看到event.ctrlKey、event.altKey、event.shiftKey或者event.modifiers。
<script language="JavaScript"><!--function mouseDown(e) { var ctrlPressed=0; var altPressed=0; var shiftPressed=0; if (parseInt(navigator.appVersion)>3) { var evt = navigator.appName=="Netscape" ? e:event; if (navigator.appName=="Netscape" && parseInt(navigator.appVersion)==4) { // NETSCAPE 4 CODE var mString =(e.modifiers+32).toString(2).substring(3,6); shiftPressed=(mString.charAt(0)=="1"); ctrlPressed =(mString.charAt(1)=="1"); altPressed =(mString.charAt(2)=="1"); self.status="modifiers="+e.modifiers+" ("+mString+")" } else { // NEWER BROWSERS [CROSS-PLATFORM] shiftPressed=evt.shiftKey; altPressed =evt.altKey; ctrlPressed =evt.ctrlKey; self.status="" + "shiftKey="+shiftPressed +", altKey=" +altPressed +", ctrlKey=" +ctrlPressed } if (shiftPressed || altPressed || ctrlPressed) alert ("Mouse clicked with the following keys:/n" + (shiftPressed ? "Shift ":"") + (altPressed ? "Alt " :"") + (ctrlPressed ? "Ctrl " :"") ) } return true;}if (parseInt(navigator.appVersion)>3) { document.onmousedown = mouseDown; if (navigator.appName=="Netscape") document.captureEvents(Event.MOUSEDOWN);}// --></script>
event.ctrlKey、 event.altKey、 event.shiftKey的意義是一目瞭然的。如果相應的鍵被按下它們的值為 true,反之為 false。Netscape 4屬性 event.modifiers稍微有點技巧。根據實際的鍵組合,這個屬性的值主要有:
Alt only modifiers=1 (001)Ctrl only modifiers=2 (010)Ctrl+Alt modifiers=3 (011)Shift only modifiers=4 (100)Shift+Alt modifiers=5 (101)Shift+Ctrl modifiers=6 (110)Shift+Alt+Ctrl modifiers=7 (111)None of these keys modifiers=0 (000)
因此,event.modifiers的二進位值表示: 最小(右側)的一位是1表示Alt被按下 第二位是1表示Ctrl被按下 第三位是1表示Shift被按下
6. 禁止Shift-滑鼠點擊(Shift-click: Disabling)
Q:我可以禁止瀏覽器對Shift-滑鼠點擊的預設響應。
A:在Netscape Navigator 4或者Internet Explorer 4或者更新的瀏覽器中,你可以區分Shift-滑鼠點擊和普通的滑鼠點擊,並且禁止對Shift-滑鼠點擊的預設響應。例如,在這個頁面Shift-滑鼠已經被禁止。如果你在Windows中使用版本4(或者更新)的瀏覽器,你可以在任何超連結上進行測試。(在舊版的瀏覽器中,仍然會有預設的響應。)
要禁止Shift-滑鼠點擊,把下面的代碼插入頁面的<HEAD>地區:
<script language="JavaScript"><!--function mouseDown(e) { var shiftPressed=0; if (parseInt(navigator.appVersion)>3) { if (navigator.appName=="Netscape") shiftPressed=(e.modifiers-0>3); else shiftPressed=event.shiftKey; if (shiftPressed) { alert ('Shift-click is disabled.') return false; } } return true;}if (parseInt(navigator.appVersion)>3) { document.onmousedown = mouseDown; if (navigator.appName=="Netscape") document.captureEvents(Event.MOUSEDOWN);}//--><script>