当前位置: 首页 > news >正文

javascript的鼠标事件是个比较庞大的家族。常见的有以下8个:

  • mousedown:鼠标的键钮被按下。
  • mouseup:鼠标的键钮被释放弹起。
  • click:单击鼠标的键钮。
  • dblclick:鼠标的键钮被按下。
  • contextmenu :弹出右键菜单。
  • mouseover:鼠标移到目标的上方。
  • mouseout:鼠标移出目标的上方。
  • mousemove:鼠标在目标的上方移动。

mousedown事件与mouseup事件可以说click事件在时间上的细分,顺序是mousedown => mouseup => click。因此一个点击事件,通常会激发几个鼠标事件。

请在这里点击,测试一个点击到底捆绑了多少种鼠标事件?!

清空

有了它们,我们可以做许多事,但对于高层次的应用(如游戏)是显然不够的,于是鼠标事件的点击事件又根据究竟是点左键还是右键进行细分。在DOM2.0中,W3C对鼠标事件作了现范,鼠标事件被解析为MouseEvent(我们可以用e.constructor == MouseEvent来判断其是否为鼠标事件,是左键点击还是右键点击由它的一个叫button的属性判定。以下就是W3C的标准现范:

  • 1:按下左键
  • 2:按下中键
  • 3:按下右键

当然微软是不会妥协的,因为e.button本来就是微软最先实现的,网景用的是e.which,但相对而言,微软的复杂多了。

  • 0:没有键被按下
  • 1:按下左键
  • 2:按下右键
  • 3:左键与右键同时被按下
  • 4:按下中键
  • 5:左键与中键同时被按下
  • 6:中键与右键同时被按下
  • 7:三个键同时被按下

更详细的情况见下表。

GE:Gecko ;SA:Safari; OP:Opera; NS:Netscape

IENS 4GE ≥ 1.0
SA 3
OP ≥ 8.0
GE0.9OP<8.0
e.button左键1undefined011
中键4undefined123
右键2undefined232
e.which左键undefined1111
中键undefined2223
右键undefined3332

为此我们可以使用以下函数来绑定左中右键。

functionbindMouseEvent(el){

varargs = [].slice.call(arguments),

el = el || document;

args[0] =function(){},

args[1] = args[1] || args[0],

args[2] = args[2] || args[0],

args[3] = args[3] || args[0],

el.onmousedown =function(e){

e = e || window.event;

varbutton = e.button;

if( !e.which && isFinite(button) ) {

e.which = [0,1,3,0,2,0,0,0][button];//0现在代表没有意义

}

args[e.which](e);

}

}

它接受四个参数,第一个为绑定对象,第二个左键按下的回调,第三个为中键按下的回调,第四个为右键按下的回调。用法如下:

varel = document.getElementById("mouse");

varex = document.getElementById("explanation");

varleft =function(){

ex.innerHTML ="左键被按下";

}

varmiddle =function(){

ex.innerHTML ="中键被按下";

}

varright =function(){

ex.innerHTML ="右键被按下";

}

bindMouseEvent(el,left,middle,right);

请在这里点击,测试左中右鼠标键绑定函数

此外,通过鼠标在网页上的点击,我们还可以获得许多有用的参数,如获得当前鼠标的坐标。根据其参照物的不同,分为以下几套坐标系。一套是以当前浏览器的可视区为参照物(clientX, clientY),另一套是以显示器的屏幕为参照物(screenX, screenY)。此外微软还有一套坐标系(x,y),它是相对于触发事件的对象的offsetParent的,火狐有另一套坐标系(pageX, pageY),它是相对于当前网页的。我们可以通过如下函数来获得鼠标在网页的坐标。

vargetCoordInDocument =function(e) {

e = e || window.event;

varx = e.pageX || (e.clientX +

(document.documentElement.scrollLeft

|| document.body.scrollLeft));

vary= e.pageY || (e.clientY +

(document.documentElement.scrollTop

|| document.body.scrollTop));

return{'x':x,'y':y};

}

请在这里移动鼠标。

(clientX,clientY)的坐标系,不受滚动条影响

至于mouseover,mousemove,mouseout没有什么好说,并且无浏览器差异。我们来看鼠标滚轮事件,这个差异很严重。IE、Safari、 Opera 、chrome是mousewheel事件,Firefox是DOMMouseScroll事件。事件属性方面,IE等是event.detail,Firefox是event. wheelDelta。IE等往上滚一圈为120,往下滚一圈为-120。Firefox往上滚一圈为-3,往下滚一圈为3。我们可以构造一个函数来削除它们的差异。

varmouseScroll =function(fn){

varroll =function(){

vardelta = 0,

e = arguments[0] || window.event;

delta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;

fn(delta);//回调函数中的回调函数

}

if(window.netscape ){

document.addEventListener('DOMMouseScroll', roll,false);

}else{

document.onmousewheel = roll;

}

}

此函数接受一函数作为参数,如:

mouseScroll(function(delta){

varobj = document.getElementById('scroll'),

current = parseInt(obj.offsetTop)+(delta*10);

obj.style.top = current+"px";

});

运行代码

http://www.jsqmd.com/news/1132136/

相关文章:

  • 数据库第六章
  • Agent时代的知识图谱,到底还能怎么玩?
  • Product Hunt 每日热榜 | 2026-07-04
  • Web 渗透测试中的注入漏洞:从原理到实战的完整攻防指南
  • 作业也也也也耶耶耶耶耶
  • P1028 [NOIP 2001 普及组] 数的计算
  • MP1584 降压电源 PCB 布局 5 大要点:实测 SW 节点尖峰降低 60%
  • Pandas基础:数据分析瑞士军刀
  • 《智人之上》第四章「错误:绝对正确是一种幻想 」读后总结
  • 张家口口碑黄金铂金回收白银回收实体老店
  • 《智人之上》第三章「文件:纸老虎也会咬人 」读后总结
  • NSK精密滚珠丝杠W1602MA技术详解
  • GPU打满却吞吐不涨?SGLang用Tracing+AI Agent揪出推理“黑盒”卡点
  • 我节选一些我喜欢的片段和大家分享一下,开复老师有关教育、做人、团队建设、领导能力等方面的论述以及他自己的行动太让我惊喜了!
  • ROS2/Gazebo 仿真:机器人 URDF 中惯性张量参数 4 步校准与实测验证
  • 高效同步降压转换器与PIC18F47K42的硬件设计及I2C控制
  • 来自技术新人的一个自我介绍
  • 华为设备Bootloader解锁终极指南:使用PotatoNV实现系统定制自由
  • 2026年5款自媒体录音转文字工具对比:手机/平板/PC跨平台体验谁更稳?
  • 如何免费获取八大网盘直链下载地址:LinkSwift完整使用指南
  • RAG 系统从搭建到优化:我踩过的 5 个坑,每一个都让我重新写代码
  • C语言的前置细碎知识
  • 16位ADC如何榨出24位精度?硬核拆解采集卡的软件过采样算法与三重缓冲区架构
  • Windows 11 下安装 Codex CLI,并配置独立 API 模式与桌面端分离使用
  • 重庆高口碑黄金回收白银回收
  • 2026最新调研录音整理工具选择建议 | 经过筛选的实用方案口碑盘点
  • 轻量级的数据交换格式——初识Json(下)
  • 杨紫白玉兰后台拥抱的那个男人,到底什么来头?
  • Lemos知识库-AI+知识图谱驱动智能脑进化
  • 具身数据启示录:打破物理茧房,六大源泉如何为机器人注入灵魂