JavaScript FAQ(十六)——鼠标事件(三)

 十二、鼠标事件

 

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>
时间: 2024-09-20 00:50:27

JavaScript FAQ(十六)——鼠标事件(三)的相关文章

selenium-webdriver(python) (十五) 鼠标事件简介

本节重点: ActionChains 类 context_click()  右击 double_click()   双击 drag_and_drop()  拖动 测试的产品中有一个操作是右键点击文件列表会弹出一个快捷菜单,可以方便的选择快捷菜单中的选择对文件进行操作(删除.移动.重命名),之前学习元素的点击非常简单: driver.find_element_by_id("xxx").click() 那么鼠标的双击.右击.拖动等是否也是这样的写法呢?例如右击: driver.find_e

selenium-webdriver(python) (十五) -- 鼠标事件

本节重点: ActionChains 类   context_click()  右击   double_click()   双击   drag_and_drop()  拖动   测试的产品中有一个操作是右键点击文件列表会弹出一个快捷菜单,可以方便的选择快捷菜单中的选择对文件进行操作(删除.移动.重命名),之前学习元素的点击非常简单: driver.find_element_by_id("xxx").click() 那么鼠标的双击.右击.拖动等是否也是这样的写法呢?例如右击: drive

JavaScript FAQ(六)——字符串

 四.字符串   1. 字符串中的引号(Quotes in String) Q:我如何在字符串中插入引号呢? A:字符串中的引号应该用一个反斜杠(/)引导.如此,JavaScript就会分辨出这些引号是普通字符串还是字符串的分隔符.下面是示例: string1='It/'s five o/'clock!'; string2="<A HREF=/"index.htm/">"; 或者,如果字符串中只包含有单引号,那么你可以使用双引号作为字符串的分隔符,反之亦

JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件

JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI 一.GUI的概述 GUI全称叫做Graphical User Intergace(图形用户接口),用图形的方式,来显示计算机操作的界面,这样更加方便直观,与用户交互 说道交互,其实系统跟用户有两种交互,一种是GUI,一种叫做CLI,也就是命令行,全称叫做Command User Intergace

JavaScript FAQ(十五)——鼠标事件(二)

 十二.鼠标事件   2. 左键 vs.右键(Left vs. Right Button) Q:我如何检查用户点击的是右键还是左键? A:click事件只在左键发生,因此onClick事件处理器不用进行左右键测试. 另一方面,mousedown和mouseup事件可能发生在鼠标的任何键上.要确定用户点击的是左键还是右键,可以使用下列事件属性: Netscape Navigator中 event.which Internet Explorer中 event.button 若这些属性的值是1,事件就

JavaScript FAQ(十四)——鼠标事件(一)

十二. 鼠标事件   1. 鼠标事件属性(Mouse Event Properties) Q:哪些事件属性我可以用来分析鼠标事件?A:Netscape Navigator 4和Internet Explorer 4(以及较新版本)支持相当少的事件属性.其中一些在两个浏览器上是一样的(例如,event.screenX或者event.typ):不过,多数还是平台相关.移动或点击鼠标,下面的文本框会显示你当前浏览器()的所有事件属性:(译者注:由于原文实例不能正确运行,这里只贴出相关的JavaScri

JavaScript 学习笔记(十六) js事件_基础知识

回顾 事件对象里包含三个方面的信息····回看上一篇内容! 事件对象里的属性和方法,主要是鼠标和键盘的信息. 1. 获取事件类型 事件对象属性type 2. 获取按键代码 事件对象属性keyCode:回车为13,空格为32,后退键为8 3. 检测Shift.Alt.Ctrl键 事件对象属性是否被按下:shiftKey.altKey.ctrlKey 4. 获取客户端坐标 事件对象属性clientX和clientY 5. 获取屏幕坐标 事件对象属性screenX和screenY 事件的类型 根据触发

网页制作前台之Javascript鼠标事件

javascript|鼠标|网页 如果你完全不懂,那么期望1-2周看完一遍拉倒....不用看的太仔细,后面再看到不懂的时候回头去看这些东西好了. 1. 前言和准备工作 这里不会介绍什么软件的用法一类的东西.如果觉得手写代码是在装的人可以出去了,谢谢. 首先你要有台电脑.然后它应该装着windows 和 IE.下面所谈到的代码都仅在IE6.0下调试通过,但是我会尽量用标准的写法.这里先不仔细介绍兼容性问题了,那是另一个教程的事情.我习惯用记事本或者UltraEdit来编辑,实际上任何文本编辑器都可

JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解_javascript技巧

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现.很早就接触过闭包这个概念了,但是一直糊里糊涂的,没有能够弄明白JavaScript的闭包到底是什么,有什么用,今天在网上看到了一篇讲JavaScript闭包的文章(原文链接),讲得非常好,这下算是彻底明白了JavaScript的闭包到底是个神马东东以及闭包的用途了,在此写出来和大家分享一下,希望不理解JavaScript闭包的朋友们看了之后能够理解闭包!以下内容大部分是来自原文,我在原文的基础